小编bbq*_*bot的帖子

在 MS SQL Server 中正确使用 varbinary 类型

我在一个新职位上,被告知要实现一个存储过程,该过程将接受用户 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 或 …

sql-server t-sql parameter array table-valued-parameters

4
推荐指数
1
解决办法
409
查看次数