0

そのため、行の小さなバッチ(<10)を一度にテーブルに挿入しようとしています。データはテーブル値パラメーターにありますが、挿入する前に、すべての行に共通するいくつかの列を追加する必要があります。私はこれを行う2つの方法を試しました:

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に複数の行がある場合に限り、これらの両方の試行で同じエラーが発生します。

サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。

ループに頼らずにこれらの挿入を実行したいと思っていましたが、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 に答える