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

标签 sql azure t-sql sql-insert azure-synapse

考虑这个表:

CREATE TABLE t (i int, j int, ...);

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

INSERT INTO t VALUES ((SELECT 1), (SELECT 2), ...);

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

Failed to execute query. Error: Insert values statement can contain only constant literal values or variable references.

有办法解决这个问题吗?

最佳答案

看来 SQL 数据仓库的 INSERT .. VALUES 语句有一些限制,但 INSERT .. SELECT 则没有。请求的查询可以重写为:

INSERT INTO t SELECT (SELECT 1), (SELECT 2);

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

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

关于sql - 插入值语句只能包含 SQL 数据仓库中的常量文字值或变量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50530621/

相关文章:

mysql - 在 MySql 中更新表时验证行项目金额的触发器

c++ - 分离与合并由静态语言的数据库表制成的对象

sql - 在 PostgreSQL 中存储和查询区间树

sql - 子字符串sql server

sql - 如何根据合并列的值过滤分组查询?

sql-server - Varchar 和 nvarchar 隐式转换为 int 的不同之处

SQL:按列分区并在分区内随机排列结果

c# - 调试时身份验证成功,但在 Azure 应用服务上身份验证失败

Azure 服务总线队列消息被卡住

使用 R 从 Microsoft Azure 读取 csv 文件