我在一个新职位上,被告知要实现一个存储过程,该过程将接受用户 ID 列表并更新一个标志。
当我建议使用表值参数(数组模拟)时,我被告知要实现如下所示,因为这是以前的做法。我不是 DBA,但我是一名全栈开发人员,这对我来说很有趣。
仅供参考 - 用户 ID 实现为类型 int
CREATE PROCEDURE [dbo].[UpdateUsers]
@rgIDs varbinary(max) -- contains several ids
AS
DECLARE @tblTmp TABLE (ID int PRIMARY KEY)
DECLARE @ich int, @cch int, @ID int
SET @cch = DATALENGTH (@rgIDs)
SET @ich = 1
WHILE (@ich < @cch)
BEGIN
SET @ID = SUBSTRING (@rgIDs, @ich, 4)
UPDATE dbo.Users u
SET isUpdated = 1
WHERE u.ID = @ID
SET @ich = @ich + 4
END
Run Code Online (Sandbox Code Playgroud)
不是表值类型在这里工作得更好吗?更具可读性、性能、更不容易出错等......?
我相信我将使用 SQL Server 2012 或 …