2016-04-11 128 views
0

我一直在努力與SQL語句一段時間了,我似乎無法繞過我的頭問題。SQL - 插入語句與子查詢,然後更新語句

我想使用SELECT子查詢在表A中插入新記錄。完成後,我想更新表B中的記錄。

這裏是我試過(虛擬SQL,外觀類似):

INSERT INTO [A] (ID, Expiration, Type) 
VALUES ({some-id}, (
    SELECT [B].[Expiration], [B].[Type] FROM [B] 
    WHERE [B].ID = {other-id})) 

運行時的聲明,我得到以下錯誤:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS

我不太確定錯誤存在的地方,但我懷疑這與我的where子句有關select

編輯 此查詢從.net解決方案中運行。我有查詢的設置是這樣的:

string insertStatement = "INSERT INTO [A] (ID, Expiration, Type) " 
    + "VALUES (@someId, (SELECT [B].[Expiration], [B].[Type] " 
    + "WHERE [B].ID = @otherId))"; 

command.CommandText = insertStatement; 
command.AddParameter("@someId", someId); 
command.AddParameter("@otherId", otherId); 
command.ExecuteNonQuery(); 
+0

您可以使用臨時表的概念,然後將臨時表爲[A] 。 – Bharat

回答

1

試試這個

INSERT INTO [A] (ID, Expiration, Type) 
    SELECT {some-id},[B].[Expiration], [B].[Type] FROM [B] 
    WHERE [B].ID = {other-id} 
+0

'{some-id}'不是表['B]'的一部分,那麼這不就是給我另一個問題嗎? – Detilium

+0

只要{some-id}是一個常數值 – BigM

+0

好吧,這似乎工作。標記爲答案,謝謝! – Detilium

1

@someId變量移到Select查詢中。

試試這個

string insertStatement = "INSERT INTO [A] (ID, Expiration, Type) " 
    + "(SELECT @someId, [B].[Expiration], [B].[Type] " 
    + "WHERE [B].ID = @otherId)"; 

command.CommandText = insertStatement; 
command.AddParameter("@someId", someId); 
command.AddParameter("@otherId", otherId); 
command.ExecuteNonQuery(); 
+0

似乎也有效。 Upvoted。欣賞答案。謝謝 – Detilium

1

試試這個..

INSERT INTO A(ID,Expiration,Type) 
SELECT @SOME_ID,[B].[Expiration], [B].[Type] 
FROM [B] 
WHERE [B].ID = {other-id} 

它應該爲你工作..

+0

這工作就像一個魅力。謝謝。 – Detilium