从另外两个表插入第三个表

时间:2012-07-20 16:09:23

标签: sql sql-server-2008 tsql

所以我试图将一小批行(< 10)一次插入表中。数据是一个表值参数,但我需要在插入之前为所有行添加一些额外的列。我尝试了两种方法:

INSERT INTO endTable
([col1],[col2],[commoncol1],[commoncol2])
SELECT
t.col1, t.col2, @CommonValue1, @CommonValue2
FROM startTable t

我还尝试将公共变量放入临时表变量,然后将其与startTable交叉连接,如下所示:

DECLARE @tempTable TABLE([temp1],[temp2])
INSERT INTO @tempTable(temp1,temp2) VALUES (@CommonValue1, @CommonValue2)

INSERT INTO endTable
([col1],[col2],[commoncol1],[commoncol2])
SELECT
a.col1, a.col2, b.temp1, b.temp2
FROM startTable a CROSS JOIN @tempTable b

当且仅当startTable有多行时,这两种尝试都会产生相同的错误:

  

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。

我希望在不使用循环的情况下完成这些插入,但我对SQL并不十分熟悉,所以我不知道我是否运气不好,或者我是否遗漏了一些明显的东西。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

由于您的INSERT语句没有子查询,因此错误消息没有意义。我的猜测是你在endTable上有一个触发错误的触发器。

运行以下查询以查看endTable上是否有任何触发器。如果这样做,那么你需要检查触发器中的SQL,看看它为什么会抛出错误。

SELECT * 
FROM sys.triggers 
WHERE parent_id = OBJECT_ID(N'endTable')