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

组合式的更新问题
@Where nvarchar(300)=null,  --更新条件
@NickName nvarchar(50)=null
@字段二 nvarchar(50)=null
@字段N nvarchar(50)=null

declare @sql nvarchar(4000)
set @sql='update Users set EditTime=getdate() '

if (@NickName is not null)
Set @sql=@sql+', NickName='+cast(@NickName as nvarchar)

if (@字段二 is not null)
Set @sql=@sql+', 字段二='+cast(@字段二 as nvarchar)

if (@字段N is not null)
Set @sql=@sql+', 字段N='+cast(@字段N as nvarchar)

Set @sql=@sql+' where '+@Where

Exec(@sql)

(以上的是错误的,因为最终组合成的sql语句会变成:'... NickName=我的称呼, ... 这样就会导制出错)
其目的是想通过if来更新不同的字段数据(不需更新的字段不能再重新写入一次,就算是写入原来的字段数据),也试了其它的方法,都搞不定,各位帮下忙,看是否能通过这样的方法来更新字段

------解决方案--------------------
Declare @sql nvarchar(4000)
Set @sql = 'Update #Users set EditTime = ''' + cast(getdate() as nvarchar(50))+''''
if(@NickName is not null)
SET @sql = @sql + ', NickName=''' + @NickName + ''''
if(@Segment2 is not null)
SET @sql = @sql + ', Segment2=''' + @Segment2 + ''''
if(@SegmentN is not null)
SET @sql = @sql + ', SegmentN=''' + @SegmentN + ''''
SET @sql = @sql + ' WHERE ' + @Where
exec (@sql)

------解决方案--------------------
多加几个单引号就可以了。(把单引号之间的空格去掉)

@Where nvarchar(300)=null,  --更新条件
@NickName nvarchar(50)=null
@字段二 nvarchar(50)=null
@字段N nvarchar(50)=null 

declare @sql nvarchar(4000)
Set @sql = 'Update #Users set EditTime = ''' + cast(getdate() as nvarchar(50))+ ''''

if (@NickName is not null)
SET @sql = @sql + ', NickName= ''' + @NickName + ''''


if (@字段二 is not null)
Set @sql=@sql+ ', 字段二= '''+@字段二 + ''''

if (@字段N is not null)
Set @sql=@sql+ ', 字段N= '''+@字段N + ''''

Set @sql=@sql+ ' where '+@Where

Exec(@sql)
------解决方案--------------------
@Where nvarchar(300)=null,  --更新条件 
@NickName nvarchar(50)=null 
@字段二 nvarchar(50)=null 
@字段N nvarchar(50)=null 

declare @sql nvarchar(4000) 
set @sql= 'update Users set EditTime=getdate() ' 

if (@NickName is not null) 
Set @sql=@sql+ ', NickName=' + char(39) +cast(@NickName as nvarchar) + char(39) 

if (@字段二 is not null) 
Set @sql=@sql+ ', 字段二= '+ char(39) + cast(@字段二 as nvarchar) + char(39)

if (@字段N is not null) 
Set @sql=@sql+ ', 字段N= '+ char(39) +cast(@字段N as nvarchar) + char(39)

Set @sql=@sql+ ' where '+@Where 

Exec(@sql)