OPENROWSET - 不允许从数据类型varchar到varbinary(max)的隐式转换。使用CONVERT函数运行此查询

时间:2017-11-16 15:37:49

标签: sql-server tsql stored-procedures implicit-conversion varbinarymax

您好我正在尝试将存储过程的结果插入名为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

1 个答案:

答案 0 :(得分:0)

不要养成坏习惯。你没有在insert语句中指定列列表 - 这是一个坏习惯和我们错误的原因。您的过程的结果集是[varbinary(max),varchar(10)]。这和你桌子的结构一样吗?不会。您还强制使用定义为varchar的fileid参数进行另一次隐式转换。因此,更改过程以将fileid定义为int,并在insert语句中指定列:

insert dbo.MyBinaryTable(BulkColumn, FileId)
select ...;