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 解决方案: |
|
|
|
|
|