例如写存储过程的时候需要传递多个参数作为查询条件,通常是拼接sql组成查询语句,但是用这个方法似乎可以解决问题,但我觉得是不是这样会出现些许问题,望指教
例如:参数@a,
SELECT * FROM Table WHERE (id=@a OR ''=@a)
如果@a为空字符串的时候,此处就会成立不会影响到查询结果因为没有传递这个参数而查询不到数据.
例如:参数@a,
SELECT * FROM Table WHERE (id=@a OR ''=@a)
如果@a为空字符串的时候,此处就会成立不会影响到查询结果因为没有传递这个参数而查询不到数据.
SELECT * FROM Table WHERE (id=@a OR ''=@a or id='')
当@a为空串?这个需要根据需求去决定的,并不一定@a为空串就查不到东西.
传参数时要注意的另一个问题是NULL,为了防止出现NULL错误,可以设置参数的默认值,这都是很容易解决的.
MSSQL已经设计好了许多解决问题的办法,你一定能找到一种或多种办法来实现你的需求,只是,你得不断提高自己的水平而已.
通常我的做法是,这样做发主要是方便在传入的值为空字符串的时候也可以查询到数据,不一定
参数@a空字符串,(不是null)的时候也能查询的数据.CREATE PROCEDURE pro_obj
@a VARCHAR(20)=''
BEGIN
SELECT * FROM Table WHERE (id=@a OR ''=@a)
END
GO
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