如何在存储过程中将列作为参数传递?

时间:2010-06-23 19:52:00

标签: sql sql-server sql-server-2005 tsql dynamic-sql

如何传递和使用列名来检索实际列中的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'

收到错误消息“将数据类型varchar转换为bigint时出错。”

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您需要使用OUTPUT关键字指定@personID是out参数:

DECLARE @SQL NVARCHAR(max)
    SET @SQL = 'SELECT @personID = w.' + @PersonColumnID + ' 
                  FROM dbo.Loss_Witness w
                 WHERE w.witnessID = @witnessID '

BEGIN 

  EXEC sp_executesql @SQL, @personID = @personID OUTPUT, @witnessID

END

another example here

答案 1 :(得分:1)

另请注意,代码中可能存在SQL注入安全漏洞。如果你没有消毒@PersonColumnID那么你可能会遇到大麻烦。