存储过程中根据参数的空值与否拼接语句
题:存储过程有4个参数,1个是数据表名,3个是数据字段,
在这3个数据字段中,至少有一个数据字段参数不为空。
我的方式是:由于有3个不确定空值与否的参数,查询语句也不确定,可以根据判断,得出查询语句。
存储过程我是这样写的
if exists (select name from sysobjects where name = 'MyProcedurePD ' and type = 'p ')
drop procedure MyProcedurePD
go
create PROCEDURE MyProcedurePD
--参数---
@tablename nvarchar(20), --表名
@var1 nvarchar(20)= ' ', --参数1
@var2 nvarchar(20)= ' ', --参数2
@var3 nvarchar(20)= ' ', --参数3
As
BEGIN
--初始化空值参数-----------
if(@var1 is null)
set @var1= ' '
if(@var2 is null)
set @var2= ' '
if(@var3 is null)
set @var3= ' '
--初始化查询语句-----------
declare @where nvarchar(4000)
set @where = ' '
if(len(@var1)> 0)
begin
if(len(@where)=0)
begin
set @where=@where + 'ywlbid = ' ' '+@var1+ ' ' ' '
end
else
begin
set @where=@where + 'and ywlbid = ' ' '+@var1+ ' ' ' '
end
end
if(len(@var2)> 0)
begin
if(len(@where)=0)
begin
set @where=@where + 'ywid = ' ' '+@var2+ ' ' ' '
end
else
begin
set @where=@where + 'and ywid = ' ' '+@var2+ ' ' ' '
end
end
if(len(@var3)> 0)
begin
if(len(@where)=0)
begin
set @where=@where + 'ywxid = ' ' '+@var3+ ' ' ' '
end
else
begin
set @where=@where + 'and ywxid = ' ' '+@var3+ ' ' ' '
end
end
if(len(@where)> 0)
set @where = ' WHERE '+@where
declare @SQLCOUNT nvarchar(4000);
set @SQLCOUNT = ' select * from '+@tablename+ ' '+ @where
EXEC (@SQLCOUNT)
END
但是老是报错,说“as 附近有错”
请达人解答。
------解决方案--------------------var3 nvarchar(20)= ' ', --参数3
==>
var3 nvarchar(20)= ' ' --参数3. 多了个逗号
------解决方案--------------------@var3 nvarchar(20)= ' ', --参数3
把这里的 ', ' 去掉