2012-07-20 64 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

相關問題