如何传递和使用列名来检索实际列中的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时出错。”
有什么想法吗?
答案 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
答案 1 :(得分:1)
另请注意,代码中可能存在SQL注入安全漏洞。如果你没有消毒@PersonColumnID那么你可能会遇到大麻烦。