我的代码中有一行为变量赋值。
select @startdate = MIN(Stime) from mytable
现在我想在存储过程中实现我的代码并将表名作为参数。所以我把代码改成这样
Set @sql = 'select @startdate = MIN(Stime) from '+@mytable
EXEC (@sql)
我收到一个错误,指出该@startdate
变量未定义。有什么解决方法吗?
我的代码中有一行为变量赋值。
select @startdate = MIN(Stime) from mytable
现在我想在存储过程中实现我的代码并将表名作为参数。所以我把代码改成这样
Set @sql = 'select @startdate = MIN(Stime) from '+@mytable
EXEC (@sql)
我收到一个错误,指出该@startdate
变量未定义。有什么解决方法吗?
您需要停止使用EXEC()
动态 SQL。一个原因是,对于输出参数,您需要能够声明它们——EXEC()
处理起来有点困难。但还有更重要的原因。我假设您正在正确地清理或验证 的值@mytable
,无论它来自哪里......
DECLARE @startdate DATETIME;
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT @startdate = MIN(Stime) FROM ' + @mytable;
EXEC sp_executesql @sql, N'@startdate DATETIME OUTPUT', @startdate OUTPUT;
SELECT @startdate;