我怎样才能在动态sql中使用普通的@var

时间:2016-12-10 21:43:42

标签: sql sql-server

FOTOS是一张桌子 @pathcompleto是文件的完整路径

set @insertvalues = 'insert into FOTOS values(@count, (SELECT BulkColumn FROM Openrowset( Bulk ''' + @pathcompleto + ''', Single_Blob) as img) , @url)'

exec(@insertvalues)

背景:  这是一个循环和其他东西,但问题是他说@count没有声明,但它是。我相信这是因为动态sql(如果我删除@count,@ url也是一个错误)

我如何使这项工作?它可能适用于sp_executesql,但我不明白它在这里使用

1 个答案:

答案 0 :(得分:1)

您想要sp_executesql

set @insertvalues = '
insert into FOTOS
    SELECT @count, BulkColumn, @url
    FROM Openrowset( Bulk ''' + @pathcompleto + ''', Single_Blob) as img';

exec sp_executesql @insertvalues, N'@count int, @url varchar(max)',
                   @count = @count, @url = @url;

我还将INSERT简化为简单的INSERT . . . SELECT

注意:我不知道列的实际类型是什么。以上只是一个有根据的猜测。

此外,在使用INSERT时,您应该始终包含列名,除非您真的知道为什么要依赖默认行为。