为字符串内的变量赋值

时间:2013-08-12 14:30:44

标签: sql-server tsql

我的代码中有一行为变量赋值。

select @startdate = MIN(Stime) from mytable

现在我想在存储过程中实现我的代码并将tablename作为参数。所以我把代码改成了这个

Set @sql = 'select @startdate = MIN(Stime) from '+@mytable
EXEC (@sql)

我收到一条错误,指出@startdate变量未定义。这有什么解决方法吗?

1 个答案:

答案 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;