例如写存储过程的时候需要传递多个参数作为查询条件,通常是拼接sql组成查询语句,但是用这个方法似乎可以解决问题,但我觉得是不是这样会出现些许问题,望指教
例如:参数@a,
SELECT * FROM Table WHERE (id=@a OR ''=@a)
如果@a为空字符串的时候,此处就会成立不会影响到查询结果因为没有传递这个参数而查询不到数据.

解决方案 »

  1.   

    SELECT * FROM Table WHERE id = isnull(@id,id)建议用null代表不输入参数,''不要传进来。
      

  2.   

    SELECT * FROM Table WHERE (id=@a OR @a='' or @a is null)
      

  3.   

    --''=@a这样加有什么特殊意义吗?怎么没与id的关系?
    SELECT * FROM Table WHERE (id=@a OR ''=@a or id='')
      

  4.   

    select * from tb where id= @a
    当@a为空串?这个需要根据需求去决定的,并不一定@a为空串就查不到东西.
    传参数时要注意的另一个问题是NULL,为了防止出现NULL错误,可以设置参数的默认值,这都是很容易解决的.
    MSSQL已经设计好了许多解决问题的办法,你一定能找到一种或多种办法来实现你的需求,只是,你得不断提高自己的水平而已.
      

  5.   

    往往我们在查询数据的时候并不一定在没传入查询条件情况下查询不到数据,
    通常我的做法是,这样做发主要是方便在传入的值为空字符串的时候也可以查询到数据,不一定
    参数@a空字符串,(不是null)的时候也能查询的数据.CREATE PROCEDURE pro_obj
    @a VARCHAR(20)=''
    BEGIN
    SELECT * FROM Table WHERE (id=@a OR ''=@a)
    END
    GO
      

  6.   

    仅举例:
    alter PROCEDURE pro_obj
    @a VARCHAR(20)='' as
    BEGIN
    SELECT * FROM (select 1 a union all select 2) a --举例
    WHERE 1=1 or a=@a
    END
    GO
      

  7.   

    恩这个似乎可以避免null或者空字符串问题,谢谢指教了