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

MrM*_*MrM 1 sql t-sql sql-server sql-server-2005 dynamic-sql

如何传递和使用列名来检索实际列中的bigint变量?

DECLARE @personID BIGINT,
DECLARE @queryString varchar(500)

Set @queryString = 'Select @personID = ' + @PersonColumnID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
exec(@queryString)
Run Code Online (Sandbox Code Playgroud)

错误消息指出"必须声明变量'@personID'." 我也试过了

Set @queryString = 'Select ' + @personID + ' = ' + @witnessPersonID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
Run Code Online (Sandbox Code Playgroud)

并收到错误消息"将数据类型varchar转换为bigint时出错".

有什么想法吗?

OMG*_*ies 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
Run Code Online (Sandbox Code Playgroud)

这里有另一个例子.