我试过.
UPDATE Table1 SET Field1=NULL WHERE RTRIM(LTRIM(FILED1))=''
不过只能一次处理一个字段.

解决方案 »

  1.   

    用动态SQL,循环所有表、字段
      

  2.   

    create table Table1(col nvarchar(2),col2 nvarchar(2))
    go
    declare @s nvarchar(4000)
    set @s=''
    select @s=@s+' update Table1 set '+quotename(Name)+'=null where RTRIM(LTRIM('+Name+'))='''''+char(10)
    from syscolumns
    where ID=object_id('Table1')
    order by colid asc
    print @s
    生成的语句如下:
    /* 
    update Table1 set [col]=null where RTRIM(LTRIM(col))=''
    update Table1 set [col2]=null where RTRIM(LTRIM(col2))=''*/exec (@s)
      

  3.   

    use test
    go
    declare t_cursor cursor for
    select ID from sysobjects where objectProperty(ID,N'IsUserTable')=1
    declare @Object_ID int 
    open t_cursor
    fetch next from t_cursor into @Object_ID
    while @@fetch_status=0
    begin
    declare @s nvarchar(4000)
    set @s=''
    select @s=@s+' update Table1 set '+quotename(Name)+'=null where RTRIM(LTRIM('+Name+'))='''''+char(10)
    from syscolumns
    where ID=@Object_ID
    order by colid asc
    exec (@s)
    end
    close t_cursor
    deallocate t_cursor
      

  4.   

    /*
    用动态SQL,循环所有表
    */UPDATE Table1 SET
    Field1=nullif(isnull(Field1,''),'')
    Field2=nullif(isnull(Field2,''),'')
    Field3=nullif(isnull(Field3,''),'')
    ...
    FieldX=nullif(isnull(FieldX,''),'')
      

  5.   

    use test
    go
    declare t_cursor cursor for
    select ID from sysobjects where objectProperty(ID,N'IsUserTable')=1
    declare @Object_ID int 
    open t_cursor
    fetch next from t_cursor into @Object_ID
    while @@fetch_status=0
    begin
    declare @s nvarchar(4000)
    set @s=''
    select @s=@s+' update Table1 set '+quotename(Name)+'=null where RTRIM(LTRIM('+Name+'))='''''+char(10)
    from syscolumns
    where ID=@Object_ID
    order by colid asc
    exec (@s)
    fetch next from t_cursor into @Object_ID --漏少循环
    end
    close t_cursor
    deallocate t_cursor
      

  6.   

    declare @tname varchar(100)
    declare @cname varchar(100)
    declare tc cursor for select b.name tname,a.name cname from syscolumns a,sysobjects b 
    where a.id = b.id and b.type = 'U'
    open tcfetch next from tc into @tname,@cnamewhile @@fetch_status=0
    begin
       
        exec( 'update '+@tname+' set '+@cname+' = null where RTRIM(LTRIM('+@cname+'))=''''' )
        fetch next from tc into @tname,@cname
    endclose tc
    deallocate tc
      

  7.   

    syscolumns关联systypes表,找出字符型的字段,并且允许空的字段。
    是否允许NULL,查联机丛书syscolumns表的status字段。懒得写了,参照楼上的
      

  8.   


    create proc sp_setnull
    as
    begin
    declare @tname varchar(100)
    declare @cname varchar(100)
    declare tc cursor for select b.name tname,a.name cname from syscolumns a,sysobjects b 
    where a.id = b.id and b.type = 'U'
    open tc

    fetch next from tc into @tname,@cname

    while @@fetch_status=0
    begin
       
        exec( 'update '+@tname+' set '+@cname+' = null where RTRIM(LTRIM('+@cname+'))=''''' )
        fetch next from tc into @tname,@cname
    end

    close tc
    deallocate tc
    end