如何解决在SQL过程中给出表名,列时,如何检索特定值
||declare @id int
execute getLastRaw \'subjectID\',\'tblSubject\',@id output
print @id
alter procedure getLastRaw @column char(20),@tbl Char(20),@return int output
as
declare @dynSQL varchar(100)
select @dynSQL =\'SELECT TOP 1 \'+@return+\'=\'+ @column + \' FROM \' + @tbl + \' ORDER BY \' + @column + \' DESC\'
exec(@dynsQL)
我想获取从select语句中选择的值。但它说:
Msg 245,Level 16,State 1,Procedure getLastRaw,Line 5
Conversion failed when converting the varchar value \'SELECT TOP 1 \' to data type int.
解决方法
当您串联@return时,由于数据类型优先级,SQL Server尝试将整个表达式转换为int
由于范围的原因,您不能在动态SQL的内部或外部分配@return:存储的proc和动态SQL是不同的。局部变量仅局部作用域
您将必须使用一个临时表:这是每个连接的表,可用于内部作用域(动态SQL)
...
declare @dynSQL varchar(100)
select @dynSQL =\'SELECT TOP 1 \'+ @column + \' FROM \' + @tbl + \' ORDER BY \' + @column + \' DESC\'
CREATE TABLE #result (rtn int)
INSERT #result (rtn)
exec(@dynsQL)
SELECT @return = rtn FROM #result
GO
虽然,使用适当的SELECT既简单又正确。
declare @id int
SELECT @id = subjectID FROM tblSubject ORDER BY subjectID DESC
print @id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。