2014-01-25 2 views
0

Я исхожу из фона C# linq, поэтому я пытаюсь изучить SQL. Мне нужен простой подзапрос, который будет обновлять несколько записей в моей таблице [AccountContact] с новыми UserID, которые соответствуют ContactID в таблице [User]. Я не хочу использовать соединения.Ошибка при обновлении Несколько записей с ошибкой подзапроса 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

your '(SELECT UserID от [User] WHERE ContactID IS NOT NULL)' возвращает более одного значения, и вам нужен только один. Как определяется новый идентификатор пользователя? – Milen

+0

Можете ли вы предоставить некоторые данные образца и желаемые результаты? –

+0

Я знаю, что он возвращает более 1 значения, ему нужно обновить тысячи идентификаторов пользователя в таблице AccountContact. @ Nadeem ваш запрос делает именно то, что моя делает только более длинную версию) В значительной степени мне нужно обновить таблицу AccountContacts. В моей таблице [Пользователь] у меня есть 2 столбца UserID и ContactID. В моей таблице [AccountContact] у меня есть 2 столбца UserID и ContactID. Этот запрос должен указывать все идентификаторы пользователя в таблице [AccountContact] для контакта с контактом ContactID из таблицы [User]. Но поскольку я возвращаю чуть более 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 таблицы, где идент имеет нулевое значение,

, что должно произойти, в счете контакт таблице вы видите первая запись не имеет UserID только ContactID.

ContactID 28 будет иметь идентификатор пользователя 3, как показано в таблице [Пользователь].

Теперь таблица AccountContact должна обновлять все записи, где UserID = Null.

Затем, после того как весь пользовательский идентификатор был обновлен в таблице AccountContact, ContactID должен быть установлен в null.

После моего запроса уже побежал таблица AccountContact должен быть следующим

Query Complete

Его просто обновляя все иденты в с правильным соответствующим UserID из [User], где [AccountContact] имеет ContactID

Смежные вопросы