不要养成坏习惯。您没有在insert语句中指定列列表——这是一个坏习惯,也是我们错误的原因。过程的结果集是[varbinary(max),varchar(10)]。这和你桌子的结构一样吗?不可以。您还强制使用另一个定义为varchar的fileid参数进行隐式转换。因此,更改您的过程,将fileid定义为int,并在insert语句中指定列:
嗨,我正试图将存储过程的结果插入名为MyBinaryTable的表中。MyBinaryTable包含两列:(FileId[type:int]和BulkColumn[type:varbinary(max)])。存储过程返回两列,分别称为FileId和BulkColumn。当从存储过程将值插入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
insert dbo.MyBinaryTable(BulkColumn, FileId)
select ...;