我的代码中有一行为变量赋值。
select @startdate = MIN(Stime) from mytable
现在我想在存储过程中实现我的代码并将tablename作为参数。所以我把代码改成了这个
Set @sql = 'select @startdate = MIN(Stime) from '+@mytable
EXEC (@sql)
我收到一条错误,指出@startdate
变量未定义。这有什么解决方法吗?
答案 0 :(得分:4)
您需要停止使用EXEC()
进行动态SQL。一个原因是,对于输出参数,您需要能够声明它们 - EXEC()
处理起来有点困难。但是there are even more important reasons。我假设你正在清理或验证@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;