使用SQL子查询错误更新多个记录时出错

时间:2014-01-25 20:21:45

标签: sql-server subquery

我来自C#linq背景所以我试图学习SQL。 我想要一个简单的子查询,它将使用与[User]表中的ContactID相对应的新UserID更新我的[AccountContact]表中的多个记录。 我不想使用连接。

我的代码如下

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.

3 个答案:

答案 0 :(得分:0)

我认为你需要这个

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

答案 1 :(得分:0)

查找图像的附加链接


Initail Tables

我需要做的是更新我的AccountContact表,其中userID为null,

需要发生的是在帐户联系人表中,您看到第一条记录没有UserID,只有一个ContactID。

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

现在,AccountContact表需要更新所有记录,其中UserID = Null。

然后,一旦在AccountContact表中更新了所有UserID,就必须将ContactID设置为null。

我的Query运行后,AccountContact表应如下

Query Complete

它只是更新[AccountContact]中的所有UserID,并使用来自[User]的正确对应的UserID,其中有一个ContactID

答案 2 :(得分: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

这正是我所需要的。