我有一个进程可以抓取一堆记录(1000 条)并对它们进行操作,当我完成后,我需要将其中的大量记录标记为已处理。我可以用一个大的 ID 列表来表明这一点。我试图避免“循环更新”模式,所以我想找到一种更有效的方法来将这个 ID 包发送到 MS SQL Server 2008 存储过程中。
提案#1 - 表值参数。我可以定义一个只有一个 ID 字段的表类型,然后发送一个包含要更新的 ID 的表。
建议 #2 - XML 参数 (varchar) 和 OPENXML() 在 proc 主体中。
建议 #3 - 列表解析。如果可能的话,我宁愿避免这种情况,因为它看起来笨拙且容易出错。
其中有什么偏好,或者我错过了什么想法?
可能的重复:
将大量数据发送到存储过程的技术
我经常遇到我想将一组 Id 作为参数传递给存储过程的情况。
例如,对于 GetCustomerAccounts 存储过程,客户端从列表中选择 20 个客户。然后我想将这 20 个客户 ID 传递给程序以返回他们的帐户。
目前我通过有一个参数表来解决这个问题。我用我的客户 ID 和单个 Guid ID 填充它。然后将此单个 Guid ID 传递给过程,然后该过程再次连接参数表。我不喜欢这样,因为它涉及多次访问数据库。
另一种可能性是在逗号分隔的 Varchar 参数中传递 Id。然后,存储过程可以将此字符串解析为临时表,然后针对该表进行联接。再次感觉非常讨厌。
有一个更好的方法吗?