如何在SELECT/INTO语句中使用OUTPUT子句

6

我有以下查询:

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

这段内容涉及到IT技术,需要翻译的是:使用CREATE语句创建临时表#Jedi并将数据插入其中。我想使用OUTPUT语句来显示保存在表中的数据,但我不知道如何使用OUTPUT子句而不出现错误信息:

"'output'附近的语法不正确。"

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

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

但这样只会在表已经被创建的情况下插入该行。

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

4个回答

7

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

1
这是您需要的语法:

This is the syntax you're after:

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


-1

select into 语句可以避免日志记录。一旦使用 insert into,就会失去这个目的。


1
原始问题询问如何使用SELECT INTO来完成此操作,而不是使用INSERT INTO;他们只是使用INSERT INTO作为示例,说明他们将如何在那里完成相同的查询。鉴于此,我假设这是对建议使用INSERT INTO作为解决方案的答案的评论? - Jeremy Caney
请考虑阅读《堆栈溢出》的文章:如何回答 https://stackoverflow.com/help/how-to-answer - klediooo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接