create procedure xghs8 @hs int,@x# int as
if exists (select* from jsptab where sx#=@x#)
begin
update jsptab set hs=@hs where sx#=@x# 
print '修改成功'
end
else
print '无此货号,修改失败'--@x#带一个参数就正确,如果多个参数就不行,要怎么写呢?
exec xghs2 1001,1001001
---比如以下这样就会报错,@x#有时候只用个参数,有时候会用多个参数
exec xghs2 1001,1001001,1001002
服务器: 消息 8144,级别 16,状态 2,过程 xghs2,行 0
为过程或函数 xghs2 指定的参数太多。

解决方案 »

  1.   

    因为你的存储过程之定义了2个参数,而你要传入多个参数,那肯定会报错的。只能通过动态语句来实现:
    create procedure xghs8 @hs int,@x# varchar(1000) 
    as
    declare @sql varchar(3000);
    declare @count int;set @sql = 'select @count = count(*) from jsptab where sx# in ('+ @x# +')';
    exec sp_executesql @sql,'@count int output',@count output;if @count <> 0
    begin
      set @sql = 'update jsptab set hs=' + cast(@hs as varchar) + 
                 ' where sx# in (' + @x# + ')';
      exec(@sql);   
    print '修改成功'
    endelse
    print '无此货号,修改失败'
    go--@x#带一个参数就正确,如果多个参数就不行,要怎么写呢?
    exec xghs2 1001,'1001001'---比如以下这样就会报错,@x#有时候只用个参数,有时候会用多个参数
    exec xghs2 1001,'1001001,1001002'
      

  2.   

    还是会报错
    服务器: 消息 8144,级别 16,状态 2,过程 xghs88,行 0
    为过程或函数 xghs88 指定的参数太多。
      

  3.   

    啊,还会报错啊,不应该呀,我试了一下,确实有点问题,会报错,修改了一下,再试试:
    drop procedure xghs8
    gocreate procedure xghs8 @hs int,@x# varchar(500) 
    as
    declare @sql nvarchar(3000);
    declare @count int;set @sql = 'select @count = count(*) from jsptab where sx# in ('+ @x# +')';
    exec sp_executesql @sql,N'@count int output',@count output;if @count <> 0
    begin
      set @sql = 'update jsptab set hs=' + cast(@hs as varchar) + 
                 ' where sx# in (' + @x# + ')';
      exec(@sql);   
    print '修改成功'
    endelse
    print '无此货号,修改失败'
    go
    --@x#带一个参数就正确,如果多个参数就不行,要怎么写呢?
    exec xghs8 1001,'100'---比如以下这样就会报错,@x#有时候只用个参数,有时候会用多个参数
    exec xghs8 1001,'1001001,1001002'
      

  4.   

    还是会报错
    服务器: 消息 8144,级别 16,状态 2,过程 xghs88,行 0
    为过程或函数 xghs88 指定的参数太多。

    OK,谢谢
      

  5.   

    还是会报错
    服务器: 消息 8144,级别 16,状态 2,过程 xghs88,行 0
    为过程或函数 xghs88 指定的参数太多。

    OK,谢谢现在能还报错吗?
      

  6.   

    还是会报错
    服务器: 消息 8144,级别 16,状态 2,过程 xghs88,行 0
    为过程或函数 xghs88 指定的参数太多。

    OK,谢谢现在能还报错吗?
    不报错了,谢谢!
      

  7.   

    还是会报错
    服务器: 消息 8144,级别 16,状态 2,过程 xghs88,行 0
    为过程或函数 xghs88 指定的参数太多。

    OK,谢谢现在能还报错吗?
    不报错了,谢谢!呵呵,那就好哈