2012-07-20 68 views
0

所以我试图一次插入一小批行(< 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

由于您在第一次查询中没有任何这些运算符(=,!=,<, <= , >,> =),所以问题必须出现在其他位置。第一个版本应该可以工作。 – 2012-07-20 16:20:37

回答

2

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

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

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

谢谢!从来没有听说过触发器(我是新手),我永远无法找到它。看起来我正在使用一个循环,因为我没有修改这个。 – rkevingibson 2012-07-20 17:13:34

相关问题