所以我试图将一小批行(< 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并不十分熟悉,所以我不知道我是否运气不好,或者我是否遗漏了一些明显的东西。任何帮助将不胜感激。
答案 0 :(得分:2)
由于您的INSERT
语句没有子查询,因此错误消息没有意义。我的猜测是你在endTable
上有一个触发错误的触发器。
运行以下查询以查看endTable
上是否有任何触发器。如果这样做,那么你需要检查触发器中的SQL,看看它为什么会抛出错误。
SELECT *
FROM sys.triggers
WHERE parent_id = OBJECT_ID(N'endTable')