如何在 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 intocreate 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 的表中添加 2 个外键?

如何从 SQL Server 2014 中的 Select 查询中将数据分配给用户定义的表类型

如何修改sql server 2000 里的表中的内容?

如何直接在sql server中添加一条数据

使用 sysobjects 表中的表名创建 Sql Server 视图

sql server 2008不用查询语句怎样查看新建的表的信息?像2000中的企业管理器中有个返回所有列一样