如何传递并使用列名在实际列中检索bigint变量?如何在存储过程中将列作为参数传递?
DECLARE @personID BIGINT,
DECLARE @queryString varchar(500)
Set @queryString = 'Select @personID = ' + @PersonColumnID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
exec(@queryString)
错误消息状态“必须声明变量'@personID'”。我也试过
Set @queryString = 'Select ' + @personID + ' = ' + @witnessPersonID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
并得到了错误信息“Error conversion data type varchar to bigint。”
有什么想法?
@OMG Ponies这里仍然存在风险,即使轻微:列名不能作为参数传递给sp_executesql,因此也不能将输入中的串联原因(但请注意值已参数化)。 – 2010-06-23 20:45:13
我很努力去理解这个评论。您引用的论文非常好,并且在动态SQL上进行了标准读取。但是不管如何,除非@PersonColumnID被清理,否则在给定的代码和重写中有一个巨大的SQL注入点。提问者可能没有意识到这一点。 – Yellowfog 2010-06-23 20:52:13
SELECT @PersonColumnID ='1; drop database blah - '; – Yellowfog 2010-06-23 20:54:04