在一个更新查询中更新100k记录

m0f*_*0fo 3 sql sql-server stored-procedures sql-update

是否可以或建议运行一个更新查询,一次更新近100k记录?

如果是这样,我该怎么做?我试图将一个数组传递给我的存储过程,但它似乎不起作用,这是我的SP:

CREATE PROCEDURE [dbo].[UpdateAllClients]
    @ClientIDs varchar(max)
AS
BEGIN
    DECLARE @vSQL varchar(max)
    SET @vSQL = 'UPDATE Clients SET LastUpdate=GETDATE() WHERE ID IN (' + @ClientIDs + ')';
    EXEC(@vSQL);
END
Run Code Online (Sandbox Code Playgroud)

我不知道什么不工作,但它只是没有更新相关的查询.

任何人?

Joh*_*Woo 5

UPDATE是读你的@ClientIDs(以逗号分隔值)作为一个整体.为了说明这一点,你就是这样做的.

假设 @ClientIDs = 1,2,3,4,5

你的UPDATE命令就像这样解释它

UPDATE Clients SET LastUpdate=GETDATE() WHERE ID IN ('1,2,3,4,5')';
Run Code Online (Sandbox Code Playgroud)

并不是

UPDATE Clients SET LastUpdate=GETDATE() WHERE ID IN (1,2,3,4,5)';
Run Code Online (Sandbox Code Playgroud)

您的问题的一个建议是在您的UPDATE示例中使用子查询

UPDATE Clients 
   SET LastUpdate = GETDATE() 
WHERE ID IN
    (
       SELECT ID
       FROM tableName
       -- where condtion
    )
Run Code Online (Sandbox Code Playgroud)

希望这是有道理的.

希望这可以帮助