要把所有nvarchar类型的字段改为varchar类型,如何批量、方便实现?最好能保留数据。

解决方案 »

  1.   

    alter table 表名 alter column 列名 类型
      

  2.   

    库里有几百个表那不是烦死?我自己想到办法了,先导出sql脚本,用记事本修改sql脚本替换所有nvarchar为varchar,再导入,呵呵
      

  3.   

    新建一个数据库 (a),将数据全部导出到 a  , 然后用你的方法修改数据表的结构, 然后再将 
    a 的数据倒入到修改好的数据库。
      

  4.   

    --这样呢!你先测试一下
    CREATE TABLE TEST1(field1 nvarchar(20),field2 nvarchar(20))SP_HELP 'TEST1'EXEC sp_configure 'allow updates',1
    RECONFIGURE WITH OVERRIDE 
    GO
    UPDATE syscolumns
    SET xusertype = '167',XTYPE='167'
    WHERE id = OBJECT_ID('TEST1') AND XTYPE='231'
    GO
    EXEC sp_configure 'allow updates',0
    RECONFIGURE WITH OVERRIDE 
     SP_HELP 'TEST1'
      

  5.   

    167--Varchar类型
    231--nvarchar类型
    通过Systypes表中得到
      

  6.   

    to liangpei2008(我爱世界杯) :
        爽!虽然我不明白啥意思,但是完全符合我的要求!谢谢!
      

  7.   

    EXEC sp_configure 'allow updates',1
    RECONFIGURE WITH OVERRIDE 
    GO
    DECLARE tables_cursor CURSOR
       FOR
       SELECT name FROM sysobjects WHERE type = 'U'
    OPEN tables_cursor
    DECLARE @tablename varchar(128)
    FETCH NEXT FROM tables_cursor INTO @tablename
    WHILE (@@FETCH_STATUS <> -1)
    BEGIN  
      exec( 'UPDATE syscolumns
      SET xusertype = 167,XTYPE=167
      WHERE id = OBJECT_ID('''+@tablename+''') AND XTYPE=231')
      FETCH NEXT FROM tables_cursor INTO @tablename
    END
    CLOSE tables_cursor
    DEALLOCATE tables_cursor
    GO
    EXEC sp_configure 'allow updates',0
    RECONFIGURE WITH OVERRIDE
      

  8.   

    原nvarchar类型的字段中的中文字符变乱码了,不过算了,只能这样了