簡體   English   中英

如何在 SQL Server 並行數據倉庫表中插入多行

[英]How to insert multiple rows into SQL Server Parallel Data Warehouse table

我在帶有 SQL Server 2012 服務器的 PDW AU5 上。 我有一個空的復制表,我正在嘗試將數據加載到其中。 我只加載 2 條記錄。 所以,我在做:

INSERT INTO dbo.some_table
(Col1, Col2, Col3)
VALUES
(1, 'x', 'a'),
(2, 'y', 'b')

從網上的書籍來看,這應該有效。 (它適用於 SMP。)但是,PDW 會拋出一個錯誤,指出: Parse error at line: 4, column: x: Incorrect syntax near ','.

此錯誤所指的逗號是第一個元組之后的逗號。 我究竟做錯了什么? AU5 上不允許通過 INSERT INTO 插入多行嗎?

MSDN上用於INSERT INTO的文檔指出,與普通SQL Server相比,Parallel Data Warehous和Azure SQL Data Warehouse使用不同的插入語法,不幸的是,該SQL Server根本不支持多個VALUES元組: https//msdn.microsoft.com/zh-我們/圖書館/ms174335.aspx

-- Azure SQL Data Warehouse and Parallel Data Warehouse
INSERT INTO [ database_name . [ schema_name ] . | schema_name . ] table_name 
    [ ( column_name [ ,...n ] ) ]
    { 
      VALUES ( { NULL | expression } [ ,...n ] )
      | SELECT <select_criteria>
    }
    [ OPTION ( <query_option> [ ,...n ] ) ]
[;]

但是請注意,它確實支持INSERT INTO [...] SELECT [..]語法,因此您可以像這樣修改它:

INSERT INTO foo ( x, y, z )
SELECT 1, 'x', 'a' UNION ALL
SELECT 2, 'y', 'b' UNION ALL
SELECT 3, 'z', 'c' UNION ALL
SELECT 4, 'a', 'd' UNION ALL
SELECT 5, 'b', 'e'

(最后一行沒有UNION ALL表達式)

使用 INSERT INTO 和 SELECT:如果要插入的行數非常多,則可能會失敗並顯示錯誤:

Msg 102042, Level 16, State 1, Line 1    
The query processor ran out of stack space during query optimization. Please simplify the query.

我發現的唯一替代方法是單獨插入每一行,如下所示:

create table #A (ID integer, CollA varchar(10),  CollB Varchar(50))

Insert into #A values (2176035,'ADM1','DIFFERENT TO OPS1 APP')    
Insert into #A values (5530921,'ADM7','DIFFERENT TO OPS1 APP')    
Insert into #A values (5034949,'ADM7','DIFFERENT TO OPS1 APP')    
Insert into #A values (3780563,'ADM4','DIFFERENT TO OPS1 APP')    
Insert into #A values (5215169,'ADM2','DIFFERENT TO OPS1 APP')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM