create proc pr_test
@a1  int,
@a2  int,
@a3  int
as
declare @sql varchar(4000)
declare @Flag bit
set @Flag=0
set @sql=N'update A set'
if @A1<>-1
begin
     set @sql=@sql+N' A1='+cast(@A1 as varchar(20))
     set @Flag=1
endif @A2<>-1
begin
     if @Flag=1     set @sql=@sql+N' ,A2='+cast(@A2 as varchar(20))
     else set @sql=@sql+N' A2='+cast(@A2 as varchar(20))
     set @Flag=1
endif @A3<>-1
begin
     if @Flag=1     set @sql=@sql+N' ,A3='+cast(@A3 as varchar(20))
     else set @sql=@sql+N' A3='+cast(@A3 as varchar(20))
     set @Flag=1
endif @Flag=1 exec (@Sql)go

解决方案 »

  1.   


    --示例
    create proc p_test
    @A1 int=-1,
    @A2 int=-1,
    @A3 int=-1
    as
    declare @s varchar(8000)
    select @s
    =case @A1 when -1 then '' else ',A1=@A1' end
    +case @A2 when -1 then '' else ',A2=@A2' end
    +case @A3 when -1 then '' else ',A3=@A3' end
    ,@s=case @s when '' then ''
    else 'update A set '+stuff(@s,1,1,'') end
    if @s<>'' 
    exec sp_executesql @s
    ,N'@A1 int,
    @A2 int,
    @A3 int'
    ,@A1,@A2,@A3
      

  2.   

    zjcxc(邹建) 你的我测试用:
    p_test '22','22','22'
    或者
    p_test 22,22,22
    提示:
    服务器: 消息 214,级别 16,状态 2,过程 sp_executesql,行 14
    过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
    这是怎么回事?
    不好意思!你的这个我好像看不懂!
    stuff(@s,1,1,'') 这个是什么意思?还有就是:
    exec sp_executesql @s
    ,N'@A1 int,
    @A2 int,
    @A3 int'
    ,@A1,@A2,@A3
    这个我也看不懂!不好意思!我太菜了!
      

  3.   

    问题我是解决了!我采用的和冒牌的那个差不多的思路!但是这样不知道是笨还是咋的!唉!反正能完成任务就算了!不过我还是想知道zjcxc(邹建) 的那几个是什么意思!
      

  4.   

    --示例
    create proc p_test
    @A1 int=-1,
    @A2 int=-1,
    @A3 int=-1
    as
    declare @s nvarchar(4000)  --定义错了数据类型而已.
    select @s
    =case @A1 when -1 then '' else ',A1=@A1' end
    +case @A2 when -1 then '' else ',A2=@A2' end
    +case @A3 when -1 then '' else ',A3=@A3' end
    ,@s=case @s when '' then ''
    else 'update A set '+stuff(@s,1,1,'') end
    if @s<>'' 
    exec sp_executesql @s
    ,N'@A1 int,
    @A2 int,
    @A3 int'
    ,@A1,@A2,@A3
      

  5.   

    刚才找了相关的资料!看到SQL Server里面有很多存储过程!看来要精通这个实在不容易啊!
      

  6.   

    http://community.csdn.net/Expert/topic/3250/3250305.xml?temp=.7990686
    找个人来这个接分啊!