Sql server 从透视结果创建表变量

Sql server 从透视结果创建表变量,sql-server,tsql,Sql Server,Tsql,是否可以从透视结果创建表变量 我的透视查询: SELECT @QUERY = 'SELECT USER_KEY, ' + @COLDEPSUMMARY + ' FROM CAUSDE_TAS PIVOT ( SUM(USDE_HSU) FOR DEPA_KEY IN (' + @COLDEPARTMENT

是否可以从透视结果创建表变量

我的透视查询:

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'
@各部门:

[120000003],[120000002],[140000001],[120000005], ...
我想从pivot表创建表变量的主要原因是pivot中的列数是动态的——它可以变化,并且在70左右有很多列

更新

正如Jeremy所建议的,我已经在动态查询中将其包含在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'
   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”

若我提取动态查询并手动运行它,一切都很好——tmp被创建,我可以查询它。我用SELECT@query提取了查询。而我只是复制粘贴到另一个窗口的选择

提取后的动态查询如下所示:

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'
   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

我不明白如果我只是运行,为什么不创建tmpEXECUTE@Query?

在SELECT和FROM之间添加到tmp中是否有效?然后从tmp表中查询?请参阅@Jeremy-如果多个用户同时运行查询,是否有问题?所以每次执行查询时都会创建tmp?临时表是每个用户会话的,所以即使多个用户正在运行,它们也不会发生冲突。tmp表是全局的,如果您使用这种表,您可能会发生冲突。@Jeremy-非常感谢您的回答。我现在唯一的问题是如何查询tmp?查询Select*from tmp为我提供了“无效的对象名”tmp“。它不在动态执行的SQL的范围内,因此请将Select放入字符串中。如果在字符串外部创建了临时表,则可以将其插入,但列是动态的。取决于你想用它做什么,这可能不是一个很好的选择。动态sql有很多问题。请参阅:仅在SELECT和FROM之间添加到tmp中是否有效?然后从tmp表中查询?请参阅@Jeremy-如果多个用户同时运行查询,是否有问题?所以每次执行查询时都会创建tmp?临时表是每个用户会话的,所以即使多个用户正在运行,它们也不会发生冲突。tmp表是全局的,如果您使用这种表,您可能会发生冲突。@Jeremy-非常感谢您的回答。我现在唯一的问题是如何查询tmp?查询Select*from tmp为我提供了“无效的对象名”tmp“。它不在动态执行的SQL的范围内,因此请将Select放入字符串中。如果在字符串外部创建了临时表,则可以将其插入,但列是动态的。取决于你想用它做什么,这可能不是一个很好的选择。动态sql有很多问题。见: