【问题标题】:How to use OUTPUT clause with SELECT/INTO statement如何在 SELECT/INTO 语句中使用 OUTPUT 子句
【发布时间】:2018-02-22 16:11:32
【问题描述】:

我有以下问题

SELECT 'Luke' AS [Jedi_names], 'Skywalker' AS [Jedi_surname]
INTO #Jedi

其中CREATE 是临时表#JediINSERT 里面的数据。

我想使用OUTPUT 来显示我保存在表中的数据,但我不明白如何使用OUTPUT 子句而不收到错误消息

“'输出'附近的语法不正确。”

INSERT INTO 查询中,我会写以下内容

INSERT INTO #Jedi([Jedi_names],[Jedi_surname])
OUTPUT INSERTED.*
SELECT 'Luke' AS [Jedi_names], 'Skywalker' AS [Jedi_surname]

但如果表已经创建,这只是INSERT 行..

是否可以在第一个查询中使用OUTPUT 子句?

【问题讨论】:

    标签: sql sql-server tsql sql-server-2012


    【解决方案1】:

    您不能在select 语句中使用output 子句。它仅适用于insertupdatedeletemerge

    另一种选择是分两部分进行: 首先,创建没有记录的临时表:

    SELECT 'Luke' AS [Jedi_names], 'Skywalker' AS [Jedi_surname]
    INTO #Jedi 
    WHERE 1=0
    

    然后,使用insert...output...select将记录插入到临时表中:

    INSERT INTO #Jedi
    OUTPUT INSERTED.*
    SELECT 'Luke' AS [Jedi_names], 'Skywalker' AS [Jedi_surname]
    

    或者干脆使用select into然后select

    SELECT 'Luke' AS [Jedi_names], 'Skywalker' AS [Jedi_surname]
    INTO #Jedi;
    
    SELECT  [Jedi_names], [Jedi_surname]
    FROM #Jedi;
    

    【讨论】:

      【解决方案2】:

      请像下面这样使用

      CREATE TABLE #Jedi([Jedi_names] VARCHAR(20),[Jedi_surname] VARCHAR(20))
      
      INSERT INTO #Jedi([Jedi_names],[Jedi_surname])
      OUTPUT INSERTED.*
      SELECT * FROM 
      (
          SELECT 'Luke' AS [Jedi_names], 'Skywalker' AS [Jedi_surname]
      )K
      

      输出

      Jedi_names  Jedi_surname
      Luke    Skywalker
      

      【讨论】:

        【解决方案3】:

        这是你所追求的语法:

        CREATE TABLE #Jedi ([Jedi_forename] varchar(50),
                            [Jedi_surname] varchar(50));
        
        INSERT INTO #Jedi ([Jedi_forename],[Jedi_surname])
        OUTPUT Inserted.*
        SELECT 'Luke' AS [Jedi_names], 'Skywalker' AS [Jedi_surname]
        
        DROP TABLE #Jedi;
        

        您不能在同一语句中使用OUTPUTINTO

        【讨论】:

          【解决方案4】:

          select into 将避免记录。使用insert into 的那一刻,它就失去了目的。

          【讨论】:

          • 最初的问题是询问如何使用SELECT INTO 而不是INSERT INTO 来完成此任务;他们只使用INSERT INTO 作为他们如何在那里完成相同查询的示例。鉴于此,我假设这是对建议 INSERT INTO 作为解决方案的答案的评论?
          • 请考虑阅读SO的文章:如何回答stackoverflow.com/help/how-to-answer
          猜你喜欢
          • 1970-01-01
          • 2012-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-18
          • 2017-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多