TSQL:如何在没有游标的情况下使用生成的 sql 命令字符串填充变量

标签 tsql

我试图在存储过程中获取生成的 sql 的值。
执行这个

   DECLARE @sSQL varchar(5000), @retval int
   DECLARE @tablename varchar(50)

   SELECT @tablename = 'products'

   SELECT @sSQL = 'SELECT @retval = MAX(ID)'
   SELECT @sSQL = @sSQL + ' FROM ' + @tablename
   EXEC (@sSQL) 

   SELECT @retval

我得到
   Must declare the variable '@retval'.

如何在不使用游标的情况下获取值(我试图避免)?

最佳答案

您将需要使用 sp_executesql:

DECLARE @retval int   
DECLARE @sSQL nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);

DECLARE @tablename nvarchar(50)  
SELECT @tablename = N'products'  

SELECT @sSQL = N'SELECT @retvalOUT = MAX(ID) FROM ' + @tablename;  
SET @ParmDefinition = N'@retvalOUT int OUTPUT';

EXEC sp_executesql @sSQL, @ParmDefinition, @retvalOUT=@retval OUTPUT;

SELECT @retval;

关于TSQL:如何在没有游标的情况下使用生成的 sql 命令字符串填充变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/233843/

相关文章:

sql - T-SQL : CHECK constraint not working

sql - 存储过程返回特定间隔的记录

sql - 具有随机性的 T-SQL 返回多行,其中一行是预期的

sql - 添加当月累积的行

sql - 根据两列查找重复记录

sql-server - SQL Server : rename primary key

sql - 随着时间的推移计算不同的用户

sql - SQL Server 2000 中的非系统数据库

sql - 添加新行 datagridview 以使用默认值

sql - 选择两列中两个日期之间的记录