【发布时间】:2014-05-14 06:35:56
【问题描述】:
我创建了一个动态存储过程,如下所示。
我可以保存它而不会出错,但是当我执行它时,它似乎无法识别@temp 变量,因为它会引发以下错误:“必须声明表变量“@temp”。”
这可能是因为错误的引号/转义,如果我必须更改它以使其正确(我对 SQL 很陌生,因此某些引号可能错误或丢失)?
我的 SP(第一部分):
@selection nvarchar(100)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
DECLARE @temp AS TABLE
(
ranking int,
item nvarchar(100),
groupCount int,
groupName nvarchar(100)
)
DECLARE @sql nvarchar(max)
SET @sql = '
INSERT INTO @temp
(
ranking,
item,
groupCount,
groupName
)
SELECT RANK() OVER(ORDER BY COUNT(*) desc, policy) [Rank],
' + @selection + ',
COUNT(*) AS groupCount,
''currentMonth'' AS groupName
FROM Log_PE
WHERE CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), GETDATE(), 112) + ''01'', 112)
GROUP BY ' + @selection + '
ORDER BY groupCount desc, ' + @selection + '
...
非常感谢您在此提供的任何帮助,迈克。
【问题讨论】:
-
Dynamic Sql 有自己的 SCOPE 这个表变量对你的动态 sql 是不可见的,在你的动态 sql 中声明表变量。
标签: sql sql-server select dynamic dynamic-sql