插入值语句只能包含 SQL 数据仓库中的常量文字值或变量引用

Luk*_*der 3 sql t-sql azure sql-insert azure-sqldw

考虑这个表:

CREATE TABLE t (i int, j int, ...);
Run Code Online (Sandbox Code Playgroud)

我想从一组SELECT语句中将数据插入到表中。我的查询的简化版本是:

INSERT INTO t VALUES ((SELECT 1), (SELECT 2), ...);
Run Code Online (Sandbox Code Playgroud)

真正的查询可能要复杂得多,并且各个子查询是独立的。不幸的是,这个标准 SQL 语句(适用于 SQL Server)不适用于 SQL 数据仓库。出现以下错误:

无法执行查询。错误:插入值语句只能包含常量文字值或变量引用。

有没有办法解决这个问题?

Luk*_*der 7

似乎INSERT .. VALUES对 SQL 数据仓库的语句有一些限制,但在INSERT .. SELECT. 请求的查询可以改写为:

INSERT INTO t SELECT (SELECT 1), (SELECT 2);
Run Code Online (Sandbox Code Playgroud)

此解决方法在插入多行时也很有用:

-- Doesn't work:
INSERT INTO t VALUES ((SELECT 1), 2), ((SELECT 2), 3), ...;

-- Works:
INSERT INTO t SELECT (SELECT 1), 2 UNION ALL SELECT (SELECT 2), 3;
Run Code Online (Sandbox Code Playgroud)