组合式的更新问题
@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)