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时出错".
有什么想法吗?
您需要使用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)
这里有另一个例子.