【问题标题】:Populating a column while inserting插入时填充列
【发布时间】:2011-07-12 08:17:09
【问题描述】:

如何在我的 INSERT 语句中使用列 col5 表 @t2 中的值填充表 #tt 中的列 colNEW ? 我当前的表达式可以重复使用,还是必须使用合并?

我使用的是 mssql server 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

希望有人能帮忙。

【问题讨论】:

  • 你必须使用mergestackoverflow.com/questions/5365629/…
  • 其实刚刚才意识到——你说的mssql server 9,是指2005吗?如果是这样,则该版本中不存在合并。
  • 我的意思是 mssql server 10。你很细心。

标签: tsql merge insert


【解决方案1】:

你必须使用合并:

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 子句中引用其他表——而不是(用于插入)inserted 表。

【讨论】:

  • 违反所有逻辑,此代码不起作用。我猜微软有一个意想不到的功能(重写了“bug”这个词)。
  • @t-clausen.dk - 我在一个 2008 年的实例上运行了这个脚本,我很方便,它运行良好。您收到错误消息吗?
  • @t-clausen.dk - 适合我。只需复制粘贴即可运行。
  • 我收到此消息“消息 156,级别 15,状态 1,第 12 行关键字‘INTO’附近的语法不正确。”我试图将其重写为标准合并并且它有效。您使用的是哪个 mssql 服务器版本?
  • @t-clausen.dk - 如果您在 2005 实例上运行,或者将兼容性级别设置为此,则会显示错误。此查询仅适用于 SQL Server 2008 或更高版本,兼容性为 100 或更高版本。
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多