2015-10-13 80 views

回答

1

多部分名schema_name.table_name

SELECT * 
INTO [dbo].[new_table_name] 
FROM query; 

對於你的情況,你需要使用:

SET @query = N'SELECT Name, ' + @cols + ' 
      INTO [dbo].[new_table_name] 
      from 
      (
       select Name, Product, 
       [rn] = ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Product) 
       from #mytable 
      ) x 
      pivot 
      (
       max(Product) 
       for rn in (' + @cols_piv + ') 
      ) p '; 

EXEC [dbo].[sp_executesql] @query; 

SELECT * 
FROM [dbo].[new_table_name]; 

請記住,如果表格存在,您首先需要DROP它:

DROP TABLE [dbo].[new_table_name]; 

與方法的問題是,動態PIVOT可以返回變長列。所以下一次呼叫會有所不同,並且您每次都需要重新創建表格。

0

如果你想將數據添加到現有的表,你將需要使用...

Insert Into dbo.Table (column1, column2) 
SELECT Column1, Column2 FROM query 

但是,如果您是在尋找使用臨時表,您將需要...

SELECT * INTO #table FROM query; 

有使用臨時表等

+0

不可以,因爲他正在使用Dynamic-SQL,所以不能像您建議的那樣使用臨時表。該表將在新的上下文中並在Dynamic-SQL完成時停止存在。 – lad2025

+0

@ lad2025,現在我看到了另外一個問題 - 我已經更新了這個問題,刪除了* here *部分並將其替換爲問題標題。 – christiandev