C#中遇到一问题
mssql假如存在表 myrole 该表有如下两个字段 myid(int) myname(varchar(30))设置一变量string idstr  值为"1','2','3','"的模式
批量删除使用sql语句 delete from myrole where myid in('+ idstr +') 可以顺利执行当使用存储过程却无法顺利执行
存储过程如下,传入的@RoleIDStr值为上面的idstr
在执行中发现一个问题:如果将@RoleIDStr varchar不指定大小,即如以下存储过程,可以顺利完成执行,并且返回值为1,却不能删除任何数据。
如果@RoleIDStr varchar指定大小,也就是写为@RoleIDStr varchar(1000)的时候却提示"无法将varchar转为int的值"
CREATE PROCEDURE Delmyroles
(
@ReturnValue int output,
@RoleIDStr varchar
)
    as
    set nocount on
    begin
       BEGIN TRANSACTION
       delete  from  myrole where myid in (@RoleIDStr)
       IF @@error=0 
          begin
             COMMIT TRANSACTION
         SET  @ReturnValue=1
          end
       ELSE
          begin
             ROLLBACK TRANSACTION
          SET  @ReturnValue=0
          end         
       return  @ReturnValue
    end
GO请问大家怎么回事,如果是存储过程的问题,存储过程该如何写呢?

解决方案 »

  1.   

    你的myid是什么类型的,一般来说应该是int类型的吧?如果是int类型的话,string idstr 应该是1,2,3 这个格式的应该就可以了
      

  2.   

    我写上了啊
    该表有如下两个字段 myid(int)...string idstr 应该是1,2,3
    如果传入这样的值
    存储过程执行时如下面形式
    delete from myrole where myid in('1,2,3,')这样是运行不了的
    只能是如下形式
    delete from myrole where myid in('1','2','3','')
    即传入的值为1','2','3','才行
      

  3.   

    delete from myrole where myid in('1','2','3','')
    我直接执行能够正常
    可是一旦把1','2','3','传入存储过程就不行了
      

  4.   

    flyzq()你的方法直接执行都是不行的,直接执行要写成
    delete from myrole where myid in(1,2,3)
    而@RoleIDStr为varcahr
    在存储过程中就便成了delete from myrole where myid in('1,2,3')无法执行
      

  5.   

    请问soaringbird() 要如何解决该问题呢
      

  6.   

    declare @sql varchar(1000)
    set @sql = 'delete from myrole where myid in(' +@RoleIDStr +')'
    exec @sql
    自己核对一下引号