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确实是一个可行的替代方案,并且是一件需要记住的好事情。