【发布时间】:2018-09-10 12:09:45
【问题描述】:
我有以下动态查询要执行并将结果分配给两个变量。
DECLARE @MinDate VARCHAR(10) = ''
DECLARE @MaxDate VARCHAR(10) = ''
SET @SQL = 'SELECT @MinDate = Convert(Varchar,Cast(Min(ColumnDate) AS DATE),105),
@MaxDate = Convert(Varchar,Cast(Max(ColumnDate) AS DATE),105)
FROM ['+@Table+']';
PRINT(@SQL);
EXEC(@SQL)
PRINT(@MinDate);
PRINT(@MaxDate);
但我收到一个错误:
Msg 137, Level 15, State 1, Line 5 必须声明标量变量 “@MaxDate”。
【问题讨论】:
-
EXEC无法分配不在其自己的本地范围内的变量。使用sp_executesql和输出参数(例如DECLARE @d DATETIME; EXEC sp_executesql N'SELECT @d = GETDATE()', N'@d DATETIME OUTPUT', @d = @d OUTPUT; SELECT @d;)。 -
您所拥有的非常对注入开放。至少考虑使用
QUOTENAME。
标签: sql sql-server sql-server-2008-r2