Tsql 插入时填充列

Tsql 插入时填充列,tsql,merge,insert,Tsql,Merge,Insert,如何使用INSERT语句中col5 table@t2列的值填充表#tt中的colNEW列? 我的当前表达式是否可以重用,或者是否必须使用“合并” 我使用的是mssql服务器10 DECLARE @t1 TABLE (id INT IDENTITY(1,1), col1 INT, col2 INT) DECLARE @t2 TABLE (col3 INT, col4 INT, col5 INT) INSERT @t2 VALUES (1,2,3);INSERT @t2 VALUES (2,3,4

如何使用INSERT语句中col5 table@t2列的值填充表#tt中的colNEW列? 我的当前表达式是否可以重用,或者是否必须使用“合并”

我使用的是mssql服务器10

DECLARE @t1 TABLE (id INT IDENTITY(1,1), col1 INT, col2 INT)
DECLARE @t2 TABLE (col3 INT, col4 INT, col5 INT)

INSERT @t2 VALUES (1,2,3);INSERT @t2 VALUES (2,3,4)

CREATE TABLE #tt (id INT, col3 INT, col4 INT, colNEW int)

INSERT #tt (id, col3, col4)
SELECT *
FROM
  ( 
INSERT INTO @t1(col1,col2)  
OUTPUT Inserted.id, Inserted.col1,Inserted.col2
SELECT col3, col4  
FROM @t2 
  ) t

我希望有人能帮忙。

您必须使用合并:

DECLARE @t1 TABLE (id INT IDENTITY(1,1), col1 INT, col2 INT)
DECLARE @t2 TABLE (col3 INT, col4 INT, col5 INT)

INSERT @t2 VALUES (1,2,3);INSERT @t2 VALUES (2,3,4)

CREATE TABLE #tt (id INT, col3 INT, col4 INT, colNEW int)

INSERT #tt (id, col3, col4,colNew)
SELECT *
FROM
  ( 
MERGE INTO @t1 t1
using @t2 t2 on 1=0
when not matched then INSERT (col1,col2)  
VALUES(t2.col3, t2.col4  )
OUTPUT Inserted.id, Inserted.col1,Inserted.col2,t2.col5
  ) t

select * from #tt

这是对
MERGE
的轻微误用-我之所以使用它,是因为它允许在
OUTPUT
子句中引用其他表,而不是(对于insert)仅引用
inserted
表。

您必须使用
MERGE
。实际上,刚刚意识到——当你说mssql服务器9时,你是指2005年吗?如果是这样,那个版本中就不存在merge。我是说mssql server 10。你观察力很强。与所有逻辑相反,这段代码不起作用。我猜微软有一个意想不到的功能(重写“bug”一词)。@t-clausen.dk-我在一个2008年的实例上运行了这个脚本,它运行得很好。你收到错误消息了吗?@t-clausen.dk–对我来说很好。只是复制粘贴并运行。我收到消息“Msg 156,级别15,状态1,第12行关键字'INTO'附近语法不正确”。我尝试将其重写为标准合并,结果成功。您使用了哪个mssql服务器版本?@t-clausen.dk-如果您在2005实例上运行,或者兼容性级别设置为该版本,则会显示错误。此查询仅适用于兼容为100或更高版本的SQL Server 2008或更高版本。