日期:2014-05-18  浏览次数:20384 次

存储过程中根据参数的空值与否拼接语句
题:存储过程有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

把这里的 ', ' 去掉