帮我处理我的存储过程

时间:2009-12-09 04:58:01

标签: sql-server

在此过程中,我想从主表中删除那些进入@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

......但它不起作用?

3 个答案:

答案 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)

TSQL中的

IN需要为每个项目获取多个参数。目前,如果你传递“123,456,789”,它正在寻找值为“123,456,789”的行。 寻找“123”,“456”或“789”。

在互联网上寻找类似分裂udf的东西。这将使用您的分隔字符串并返回一列值。通常,您加入 udf结果(而不是使用IN)。

不要在这里使用EXEC,因为您不应该信任输入。