是否可以从数据结果创建表变量?
我的透视查询:
SELECT @QUERY = 'SELECT USER_KEY, ' + @COLDEPSUMMARY + '
FROM CAUSDE_TAS
PIVOT
(
SUM(USDE_HSU)
FOR DEPA_KEY IN (' + @COLDEPARTMENTS + ')
) PIVOT_LOCATIONS
WHERE USDE_DAT >= ''' + format(@dDateFrom, 'MM.dd.yyyy') + ''' AND USDE_DAT <= ''' + format(@dDateTo, 'MM.dd.yyyy') + '''
AND USER_KEY IN (' + @USERS_STR + ')
GROUP BY USER_KEY'
@COLDEPSUMMARY和@COLDEPARTMENTS是动态生成的,看起来像这样(大约有70列):
@COLDEPSUMMARY:
SUM([120000003]),SUM([120000002]),SUM([140000001]),SUM([120000005]), ...
@COLDEPARTMENTS:
[120000003],[120000002],[140000001],[120000005], ...
我想从数据透视表创建表变量的主要原因是数据透视表中的列数是动态的 - 它可以变化,并且有很多列(大约70)。
更新
正如Jeremy建议我在动态查询中包含INTO #tmp
,所以它看起来像这样:
SELECT @QUERY = 'SELECT USER_KEY, ' + @COLDEPSUMMARY + '
INTO #tmp
FROM CAUSDE_TAS
PIVOT
(
SUM(USDE_HSU)
FOR DEPA_KEY IN (' + @COLDEPARTMENTS + ')
) PIVOT_LOCATIONS
WHERE USDE_DAT >= ''' + format(@dDateFrom, 'MM.dd.yyyy') + ''' AND USDE_DAT <= ''' + format(@dDateTo, 'MM.dd.yyyy') + '''
AND USER_KEY IN (' + @USERS_STR + ')
GROUP BY USER_KEY'
如果我只使用EXECUTE(@query)运行查询,报告会说超过200行会受到影响。但是,查询:
select * from #tmp
正在回归:
无效的对象名称&#39;#tmp&#39;。
如果我提取动态查询并手动运行,一切都很好 - #tmp
已创建,我可以查询它。 (我使用SELECT @query
提取了查询。我只是将该选项复制粘贴到另一个窗口中。)
提取后的动态查询如下所示:
SELECT USER_KEY, SUM([120000003]),SUM([120000002]),SUM([140000001])
INTO #tmp
FROM CAUSDE_TAS
PIVOT
(
SUM(USDE_HSU)
FOR DEPA_KEY IN ([120000003],[120000002],[140000001])
) PIVOT_LOCATIONS
WHERE USDE_DAT >= '09.19.2016' AND USDE_DAT <= '03.18.2017'
AND USER_KEY IN (100000002,100000004,100000006,100000008)
GROUP BY USER_KEY
如果我只是运行#tmp
,我不明白为什么EXECUTE(@Query)
没有创建?