![](/img/trans.png)
[英]Implicit conversion from data type varchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query
[英]OPENROWSET - Implicit conversion from data type varchar to varbinary(max) is not allowed. Use the CONVERT function to run this query
嗨,我正在嘗試將存儲過程的結果插入到名為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語句中指定列列表-這是一個不良習慣,也是導致我們出錯的原因。 該過程的結果集為[varbinary(max),varchar(10)]。 這與表的結構相同嗎? 不會。您還可以將fileid參數定義為varchar強制進行另一個隱式轉換。 因此,更改您的過程以將fileid定義為int並在insert語句中指定列:
insert dbo.MyBinaryTable(BulkColumn, FileId)
select ...;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.