如何在 SQL Server 中的查询创建的表中添加一行?
Posted
技术标签:
【中文标题】如何在 SQL Server 中的查询创建的表中添加一行?【英文标题】:How can I add a row in a table created by a query in SQL Server? 【发布时间】:2021-01-21 12:15:03 【问题描述】:我是 SQL 的初学者。我首先编写了一个创建表的查询。有了这张表,我想添加一些行。我认为使用“insert into”语句是正确的想法,但它不起作用。
insert into (
select Element = [Key]
,New = max(case when time_index=1 then value end)
,'Current' = max(case when time_index>=2 then value end)
From (
Select [time_index]
,B.*
From (select * from ifrs17.output_bba where id in (602677,602777)) A
Cross Apply (
Select [Key]
,Value
From OpenJson( (Select A.* For JSON Path,Without_Array_Wrapper ) )
Where [Key] not in ('time_index')
) B
) A
Group By [Key])
values ('acc_test','test', 'test')
我收到此错误消息:
消息 156,级别 15,状态 1,行 2 关键字“select”附近的语法不正确。 消息 156,第 15 级,状态 1,第 17 行 关键字“值”附近的语法不正确。
如何向表中添加行?
【问题讨论】:
我删除了不兼容的数据库标签。请仅使用您真正使用的数据库进行标记。insert
插入到 现有 表中。要创建表,请使用select into
或create table as
,具体取决于您使用的数据库。
这显然是 SQL Server,基于错误。请只标记您真正使用的RDBMS。
至于问题,你要一个SELECT...INTO
:SELECT - INTO Clause (Transact-SQL)
【参考方案1】:
使用 UNION ALL 连接查询和按元素构造的行值:
insert into (
select Element = [Key]
,New = max(case when time_index=1 then value end)
,'Current' = max(case when time_index>=2 then value end)
From (
Select [time_index]
,B.*
From (select * from ifrs17.output_bba where id in (602677,602777)) A
Cross Apply (
Select [Key]
,Value
From OpenJson( (Select A.* For JSON Path,Without_Array_Wrapper ) )
Where [Key] not in ('time_index')
) B
) A
Group By [Key])
UNION
SELECT 'acc_test', 'test', 'test'
【讨论】:
谢谢@SQLpro!有用。请问最后一个问题。如果现在我想添加几行,我应该如何进行? 大概想要UNION ALL
否则你最终会不必要地区分结果集。 insert into (
是做什么的??
使用 serie a SELECT ... UNION ALL 或 Row Value Constructor docs.microsoft.com/en-us/sql/t-sql/queries/…的技术以上是关于如何在 SQL Server 中的查询创建的表中添加一行?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL Server 2014 中的 Select 查询中将数据分配给用户定义的表类型