2014-01-25 39 views
0

我來自C#linq背景,所以我試圖學習SQL。 我想要一個簡單的子查詢,它將使用與[User]表中的ContactID對應的新UserID更新[AccountContact]表中的多個記錄。 我不想使用連接。使用SQL子查詢錯誤更新多條記錄時出錯

我的代碼如下提前

UPDATE [dbo].[AccountContact] 
SET UserID = (SELECT UserID from [User] WHERE ContactID IS NOT NULL), 
    ContactID = null 
GO 

由於通過運行此代碼我得到錯誤

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

+0

你''(SELECT UserID from [User] WHERE Con​​tactID IS NOT NULL)'返回多個值,你只需要一個。新用戶如何確定? – Milen

+0

你能提供一些樣本數據和期望的結果嗎? –

+0

我知道它返回的值超過1,它需要更新AccountContact表中的數千個用戶ID。 @ Nadeem你的查詢確實是我的只是一個更長的版本:) 幾乎我需要的是更新我的AccountContacts表。 在我的[用戶]表中我有2列UserID和ContactID。 在我的[AccountContact]表中,我有2列UserID和ContactID。 此查詢應該將[AccountContact]表中的所有UserID設置爲[User]表中相應的ContactID。 但是,因爲我正在返回超過3000行記錄,我得到上述錯誤。 – user3236075

回答

0

我已經找到了解決這一問題

我已經編輯我的代碼如下

UPDATE [AccountContact] 
    SET UserID = ISNULL((SELECT UserID FROM [User] WHERE [User].[ContactID] = [AccountContact].[ContactID]),[AccountContact].UserID), 
    ContactID = NULL 
    WHERE [AccountContact].[ContactID] IS NOT NULL 

這正是我所需要的。

0

我認爲你需要這個

UPDATE [dbo].[AccountContact] SET UserID = 'Whatever value you want', 
ContactID = null where UserID = (SELECT UserID from [User] WHERE ContactID IS NOT NULL) 
0

查找附加鏈接到圖像


Initail Tables

什麼,我需要做的就是更新我的AccountContact表,其中用戶ID爲空,

需要採取什麼是你看到的帳戶聯繫表中的第一條記錄沒有用戶名只有一個ContactID。

ContactID 28的UserID爲3,如[User]表所示。

現在AccountContact表需要在UserID = Null的位置更新所有記錄。

然後,一旦在AccountContact表中更新了所有用戶標識,則必須將ContactID設置爲null。

我查詢追着AccountContact表應該是如下

Query Complete

它只是更新所有用戶名的在[AccountContact]從[用戶]正確的對應用戶ID的地方有一個使用ContactID