簡體   English   中英

OPENROWSET-不允許從數據類型varchar隱式轉換為varbinary(max)。 使用CONVERT函數運行此查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM