在此过程中,我想从主表中删除那些进入@msisdn并插入到tblDeactive中的数字:
ALTER PROCEDURE [dbo].[msisdn_deactivition](@msisdn varchar(1024))
AS
BEGIN
SET NOCOUNT ON;
insert into tblDeactive SELECT * from msisdn_master where msisdn in (@msisdn);
delete from msisdn_master where msisdn in (@msisdn);
END
......但它不起作用?
答案 0 :(得分:3)
您不能使用单个查询参数代替值列表。一个参数=一个值。
有关使用IN( )
谓词参数的几个解决方案和大量讨论,请参阅Parameterize an SQL IN clause。
答案 1 :(得分:2)
您需要使用拆分功能,将分隔的@msisdn拆分为可供选择的表格。
看一下这个链接
How to pass a list of values or array to SQL Server stored procedure?
答案 2 :(得分:1)
IN
需要为每个项目获取多个参数。目前,如果你传递“123,456,789”,它正在寻找值为“123,456,789”的单行。 不寻找“123”,“456”或“789”。
在互联网上寻找类似分裂udf的东西。这将使用您的分隔字符串并返回一列值。通常,您加入 udf结果(而不是使用IN
)。
不要在这里使用EXEC
,因为您不应该信任输入。