0

こんにちは、ストアド プロシージャの結果を MyBinaryTable というテーブルに挿入しようとしています。MyBinaryTable には、(FileId [type:int] と BulkColumn [type:varbinary(max)]) の 2 つの列が含まれています。ストアド プロシージャは、FileId と BulkColumn という名前の 2 つの列を返します。ストアド プロシージャから MyBinaryTable に値を挿入すると、次のエラーが表示されます。

Implicit conversion from data type varchar to varbinary(max) is not allowed. 
Use the CONVERT function to run this query.

これが私のストアドプロシージャです:

CREATE PROCEDURE [dbo].[GenerateBinary] @Route VARCHAR(300), @FileId 
VARCHAR(10)
AS
Declare @sql varchar(max)
Set @sql='SELECT convert(varbinary(max),((SELECT BulkColumn FROM OPENROWSET( 
BULK ''' + @Route + ''' , SINGLE_BLOB) as Data)), 0) as ''BulkColumn'',''' + 
@FileId + ''' as ''FileId'''
Print @sql
Exec(@sql)

値を挿入する方法は次のとおりです。

INSERT INTO MyBinaryTable
EXEC GenerateBinary 'xyz.docx', @FileId = 254
4

1 に答える 1

0

悪い習慣を身につけないでください。insert ステートメントで列リストを指定していませんでした。これは悪い習慣であり、エラーの原因です。プロシージャの結果セットは [varbinary(max), varchar(10)] です。それはあなたのテーブルの構造と同じですか?いいえ。また、varchar として定義された fileid 引数を使用して、別の暗黙的な変換を強制します。したがって、手順を変更して fileid を int として定義し、insert ステートメントで列を指定します。

insert dbo.MyBinaryTable(BulkColumn, FileId)
select ...;
于 2017-11-16T16:21:26.660 に答える