select MemberName from dbo.C_MemberInfo where Id in (18,19)这样的语句我想换成存储过程create proc sp_membername
(
@names nvarchar(100)
)
as
begin
select MemberName from dbo.C_MemberInfo where Id in (@names)
endexec sp_membername '18,19'出错了:从数据类型 nvarchar 转换为 bigint 时出错。
我该怎么改呢?

解决方案 »

  1.   

    @names nvarchar(100)改为
    @names int = null
      

  2.   

    你要对你的@names进行分割转换为Int型执行sql或者你传入两个int型参数
      

  3.   

    create proc sp_membername
    (
    @names int=null
    )
    as
    begin
    select MemberName from dbo.C_MemberInfo where Id in (@names)
    end
    exec sp_membername '18,19'改成这样也不行
    还是那个错误:从数据类型 varchar 转换为 int 时出错。
      

  4.   

    这个当然不行咯在in里面它一句ID的类型来判断IN后面的参数,所以把@name强制转化成整数的时候18,19是没办法转化成整数的, ,你可以用SQL拼接declare @sql varchar(max)
    set @sql = 'select MemberName from dbo.C_MemberInfo where Id in ('+@name+')';
    exec @sql
      

  5.   

    create proc sp_membername
    (
    @names int=null,
    @sql  nvarchar(500)
    )
    as
    beginset @sql ='select MemberName from dbo.C_MemberInfo where Id in ('+@names+')';end这个怎么调用
    exec sp_membername '18,19'   ?
      

  6.   

    你拼接好后还要执行这个@SQL啊 直接exec @sql
      

  7.   

    alter proc sp_membername11
    (
    @names varchar(max)
    )
    asbegin
    declare @sql varchar(max)
    set @sql = 'select * from dbo.CFG_Trunk_Ext where Id in ('+@names+')';
    exec (@sql)
    end
    exec sp_membername11 '1,2'