回答

收藏

SQL-是否有更好的方法可以将在where子句中使用的键列表传递到存储过程中?

技术问答 技术问答 277 人阅读 | 0 人回复 | 2023-09-12

这是场景;我有相关的 ;OrderIds    的 CustomerIds    列表
5 w% |) w4 {2 W9 i( j: d/ d" r。我有一个存储过程Delete_OrdersByCustomerIds,它将删除并指定 CustomerId    相关的所有订单。
+ U! i- [  z$ T6 s$ x0 ]目前,我执行这个操作的方法是 CustomerIds    连接到字符串,即
# H3 }! d3 S. A1、2、3。然后,我将字符串传递给我的存储过程,并使用以下函数创建可连接的字符串Int表:  k2 O7 U; {! ]1 a8 h
CREATE FUNCTION [dbo].[iter$simple_intlist_to_tbl] (@list nvarchar(MAX))   RETURNS @tbl TABLE (number int NOT NULL) ASBEGIN   DECLARE @pos        int,          @nextpos    int,          @valuelen   int   SELECT @pos = 0,@nextpos = 1   WHILE @nextpos > 0   BEGIN      SELECT @nextpos = charindex(',',@list,@pos    1)   SELECT @valuelen = CASE WHEN @nextpos >                                                               THEN @nextpos                              ELSE len(@list)                                                               END - @pos - 1       INSERT @tbl (number)         VALUES (convert(int,substring(@list,@pos   1,@valuelen)))      SELECT @pos = @nextpos   END  RETURNEND然后我就做一个DELETE FROM Orders WHERE CustomerId INiter$simple_intlist_to_tbl(@CustomerIds).number。(语法可能不正确,我在大声思考。
. {7 J- M/ ?8 R; f6 ?: i: f, B* X我忍不住觉得很 糟糕    。有没有更好的方法来实现同样的目标?我不想自己建立SQL语句,我目前正在使用标准语句.Net ADO包装器。
5 B; E2 ~* ?8 x2 E                                                               
3 p8 I8 m! }" u) p! b* f    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则