Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Insert values语句在SQL数据仓库中只能包含常量文字值或变量引用_Sql_Azure_Tsql_Sql Insert_Azure Sqldw - Fatal编程技术网

Insert values语句在SQL数据仓库中只能包含常量文字值或变量引用

Insert values语句在SQL数据仓库中只能包含常量文字值或变量引用,sql,azure,tsql,sql-insert,azure-sqldw,Sql,Azure,Tsql,Sql Insert,Azure Sqldw,考虑下表: CREATE TABLE t (i int, j int, ...); 我想将一组SELECT语句中的数据插入表中。我的查询的简化版本是: INSERT INTO t VALUES ((SELECT 1), (SELECT 2), ...); 真正的查询可能要复杂得多,并且各个子查询是独立的。不幸的是,这个标准SQL语句(在SQL Server上工作)在SQL数据仓库上不起作用。出现以下错误: 无法执行查询。错误:Insert values语句只能包含常量文字值或变量引用 有办法

考虑下表:

CREATE TABLE t (i int, j int, ...);
我想将一组
SELECT
语句中的数据插入表中。我的查询的简化版本是:

INSERT INTO t VALUES ((SELECT 1), (SELECT 2), ...);
真正的查询可能要复杂得多,并且各个子查询是独立的。不幸的是,这个标准SQL语句(在SQL Server上工作)在SQL数据仓库上不起作用。出现以下错误:

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


有办法解决这个问题吗?

看来
插入部分有一些限制。。SQL数据仓库的值
语句,但在
INSERT。。选择
。请求的查询可以重写为:

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;

您也可以只运行一条语句。这为SELECT语句提供了完整的语法支持,并控制了语句中的表形状(分布类型、索引类型)。CTAS语句是完全视差化的

奇怪的语法,但它可以工作。下面是一个更复杂的示例:

CREATE TABLE [MDM].[Fact_Management_Curve]
(
 [Scenario_ID] INT NOT NULL,
 [FundingYYYYMM] CHAR(6) NOT NULL,
 [CollectionYYYYMM] CHAR(6) NOT NULL,
 [CorpID] INT NOT NULL,
 [Multipler] FLOAT NOT NULL
)
GO

INSERT INTO [MDM].[Fact_Management_Curve]
SELECT (SELECT 1), 201701, 201701, 21, 0.010170154301011 UNION ALL
SELECT (SELECT 1), 201701, 201702, 21, 0.010170278901234 UNION ALL
SELECT (SELECT 1), 201701, 201703, 21, 0.010170375659900 UNION ALL
SELECT (SELECT 1), 201701, 201704, 21, 0.010170482998344
GO

SELECT * FROM  [MDM].[Fact_Management_Curve]
ORDER BY 1,2,3,4;
Scenario_ID  FundingYYYYMM  CollectionYYYYMM  CorpID  Multipler
1            201701         201701            21      0.010170154301011
1            201701         201702            21      0.010170278901234
1            201701         201703            21      0.0101703756599
1            201701         201704            21      0.010170482998344

供你参考

插入表\u名称值语法只接受常量文字值或变量引用。任何类似表达式的内容都是无效的

例如将名称值(A、B、A+B)插入表中

但是 声明@C INT=A+B 在表中插入名称值(A、B、C)是有效值


这里A+B类似于任何类型的表达式,因此它会抛出类似“仅接受常量文字值或变量引用”的错误。

当然,但我添加了
CREATE TABLE
语句只是为了说明,以记录模式。为了澄清这一点,我改变了问题。创建一个新表究竟是如何代替将行插入另一个表的?@DanBracuk:我的问题最初的措辞是,CTA确实是一个可行的替代方案,并且是一件需要记住的好事情。