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 并不是非常熟悉,所以我不知道我是否不走运,或者我是否遗漏了一些明显的东西。任何帮助将不胜感激。

4

1 回答 1

2

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

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

SELECT * 
FROM sys.triggers 
WHERE parent_id = OBJECT_ID(N'endTable')
于 2012-07-20T16:22:28.797 回答