我想把Insert和Update写在一个存储过程里,其中Insert需要9个参数,Update需要4个参数。请问参数可以做成可选的吗?也就是说执行Update的时候,只输入4个参数,可以吗?

解决方案 »

  1.   

    Update的时候,也要输入9个参数,输入4个参数,其他的5个设为DBNull.value就可以了
      

  2.   

    可以,你可以在过程中把参数默认值设为NULL。在过程语句中加以判断
      

  3.   

    其他的5个设为DBNull.value就可以了,这样相当于没有传
      

  4.   

    可以,测试:
    create proc sp_aaa
    @a varchar(10),
    @b varchar(10)=''
    asif @b=''
    print 'b为空值'
    else
    print @a
    goexec sp_aaa  'aaaaaaaaaaa'
    结果:b为空值exec sp_aaa  'aaaaaaaaaaa','asdfasdf'
    结果:aaaaaaaaaa
      

  5.   

    可以,对参数加判断就行,类似这样CREATE PROCEDURE DBO.SelectFromTable
        @nIP int = NULL,
        @nType int = NULL
    AS
    BEGIN
        SELECT * FROM dbo.Client where (@nType is null  or nType = @nType ) and (@nIP is null or nIP = @nIP )
    END把参数都传入,为空也没问题,就不会有判断了
      

  6.   

    我觉得还是在存储过程中定义一个BIT 判断是增加还是修改,这样比较保险点儿
      

  7.   


    create proc myproc
    @id int,
    @name varcar(20)=null,
    @location varchar(50)=null
    as
    begin
    根据参数判断是更新还是插入新数据
    end
    调用: exec myproc 1 只传递一个参数
    或者 exec myproc 1,'jack','shanghai'