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

请教一个存储过程的问题
这个存储过程是个更新查询,从外部获取参数后,检查参数是否为空串,如果为空就不更新相对应的字段,我这样写的,好像行不能哎

CREATE   PROC   updateSite

@intSiteID   int,
@siteName   varchar(20),
@domainName   varchar(30),
@tel   varchar(30),
@QQ   varchar(30),
@backresult   varchar(20)   output

as
declare   @sqlStr   varchar(1000),@   varchar(100)

begin
set   @sqlStr= 'set   tel=@tel '  
if   @siteName <> ' '   set   @sqlStr=@sqlStr   +   ',sitename=@sitename '  
if   @domainName <> ' '   set   @sqlStr=@sqlStr   +   ',domainname=@domainname '
if   @tel <> ' '   set   @sqlStr=@sqlStr   + ',tel=@tel '
if   @qq <> ' '   set   @sqlStr=@sqlStr   + ',qq=@QQ '
set   @sqlStr= 'update   sites   '   +   @sqlStr   +   '   where   siteid=@intSiteID '
execute     sp_executesql   N '   @updateStr ',
                    N '@updateStr   varchar(200) ',
                    @updateStr   =   @sqlStr
set   @backresult= '修改成功! '
end


------解决方案--------------------
--try

CREATE PROC updateSite

@intSiteID int,
@siteName varchar(20),
@domainName varchar(30),
@tel varchar(30),
@QQ varchar(30),
@backresult varchar(20) output

as
update sites set
tel=isnull(nullif(@tel, ' '), tel),
sitename=isnull(nullif(@sitename, ' '), sitename),
domainname=isnull(nullif(@domainname, ' '), domainname),
qq=isnull(nullif(@QQ, ' '), qq)
where siteid=@intSiteID

if @@error=0
set @backresult= '修改成功! '
else
set @backresult= '修改失敗! '
go