【问题标题】:Output inserted row from CTE从 CTE 输出插入的行
【发布时间】:2018-09-03 11:32:01
【问题描述】:

我有一个 CTE,我需要使用已插入的行填充该 CTE。

我尝试使用临时表。

我不确定如何在 CTE 中创建临时表并填充 CTE。

这是我尝试过的:

WITH RESULT AS
(

DECLARE @INSERTOUTPUT1 TABLE
(
  BOOKID INT,
  BOOKTITLE NVARCHAR(50),
  MODIFIEDDATE DATETIME
 );

-- INSERT NEW ROW INTO BOOKS TABLE
INSERT INTO BOOKS
OUTPUT INSERTED.*  INTO @INSERTOUTPUT1
VALUES(101, 'ONE HUNDRED YEARS OF SOLITUDE', GETDATE());
SELECT * FROM @INSERTOUTPUT1
)
SELECT * FROM RESULT

以下是表的架构:

DROP TABLE dbo.Books;

CREATE TABLE dbo.Books
(
  BookID int NOT NULL PRIMARY KEY,
  BookTitle nvarchar(50) NOT NULL,
  ModifiedDate datetime NOT NULL
);

【问题讨论】:

  • 暂时忘记临时表,你能解释一下你想在这里实现什么吗?
  • 你为什么放了这么多版本的SQL Server?您具体使用的是哪个?

标签: sql-server sql-server-2005 sql-server-2012 sql-server-2008-r2 common-table-expression


【解决方案1】:

您不能在 CTE 中包含 declare 语句。它应该是单独的声明。不确定您想要那里的 CTE 做什么?但不需要 CTE

DECLARE @INSERTOUTPUT1 TABLE
(
  BOOKID INT,
  BOOKTITLE NVARCHAR(50),
  MODIFIEDDATE DATETIME
 );

INSERT INTO Books
OUTPUT INSERTED.*  INTO @INSERTOUTPUT1
VALUES(101, 'ONE HUNDRED YEARS OF SOLITUDE', GETDATE());

select  *
from    @INSERTOUTPUT1

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多