6

我在带有 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 插入多行吗?

4

2 回答 2

12

MSDN 上的文档INSERT INTO指出 Parallel Data Warehouse 和 Azure SQL Data Warehouse 使用与普通 SQL Server 不同的插入语法,VALUES不幸的是它不支持多个元组:https ://msdn.microsoft.com/en-us/library /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表达式)

于 2016-03-21T20:42:40.843 回答
2

使用 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')
于 2021-08-05T06:56:51.500 回答