求一SQL语句修改类型为text的列到char(255)!

解决方案 »

  1.   

    create table tt2(a text)
    insert into tt2 select 'aaa'alter table tt2 alter column a char(255)
      

  2.   

    text现有数据不能超过255,一个汉字=char(2)
      

  3.   

    一般是这样没错
    但是我尝试过不行无法更新列'a'.因为类型是'text'后来查CSDN,貌似上面说不能修改类型'text',ntext,image等类型的列
    所以来这里确认下
      

  4.   

    我试了,我2005,可以,看了列已经是char(255)了
      

  5.   

    alter table tb alter column a char(255)
      

  6.   

    --2005更改成功.
    create table tb(a text)
    insert into tb values ('aaaaaa')
    goalter table tb alter column a char(255)
    goselect * from tbdrop table tb/*
    a
    ------------
    aaaaaa                                                              (1 行受影响)
    */--2000更改失败,研究中...
    create table tb(a text)
    insert into tb values ('aaaaaa')
    goalter table tb alter column a char(255)
    goselect * from tbdrop table tb
    服务器: 消息 4928,级别 16,状态 1,行 2
    无法更改列 'a',因为该列是 'text'。(所影响的行数为 1 行)
      

  7.   

    --2000中不能更改text列.请看说明:
    ALTER COLUMN指定要更改给定列。如果兼容级别是 65 或小于 65,将不允许使用 ALTER COLUMN。有关更多信息,请参见 sp_dbcmptlevel。 要更改的列不能是: 数据类型为 text、image、ntext 或 timestamp 的列。
    表的 ROWGUIDCOL 列。
    计算列或用于计算列中的列。
    被复制列。
    用在索引中的列,除非该列数据类型是 varchar、nvarchar 或 varbinary,数据类型没有更改,而且新列大小等于或者大于旧列大小。
    用在由 CREATE STATISTICS 语句创建的统计中的列。首先用 DROP STATISTICS 语句删除统计。由查询优化器自动生成的统计会由 ALTER COLUMN 自动除去。
    用在 PRIMARY KEY 或 [FOREIGN KEY] REFERENCES 约束中的列。
    用在 CHECK 或 UNIQUE 约束中的列,除非用在 CHECK 或 UNIQUE 约束中的可变长度列的长度允许更改。
    有相关联的默认值的列,除非在不更改数据类型的情况下允许更改列的长度、精度或小数位数。 
    有些数据类型的更改可能导致数据的更改。例如,将数据类型为 nchar 或 nvarchar 的列更改为 char 或 varchar 类型,将导致扩展字符的转换。有关更多信息,请参见 CAST 和 CONVERT。降低列的精度和小数位数可能导致数据截断。
      

  8.   

    只能加一列,将数据传给这个列,然后删除text列.
      

  9.   

    create table tt2(a text)
    insert into tt2 select 'aaa'alter table tt2 alter column a char(255)
      

  10.   

    ALTER   COLUMN 指定要更改给定列。如果兼容级别是   65   或小于   65,将不允许使用   ALTER   COLUMN。有关更多信息,请参见   sp_dbcmptlevel。   要更改的列不能是:   数据类型为   text、image、ntext   或   timestamp   的列。 
    表的   ROWGUIDCOL   列。 
    计算列或用于计算列中的列。 
    被复制列。 
    用在索引中的列,除非该列数据类型是   varchar、nvarchar   或   varbinary,数据类型没有更改,而且新列大小等于或者大于旧列大小。 
    用在由   CREATE   STATISTICS   语句创建的统计中的列。首先用   DROP   STATISTICS   语句删除统计。由查询优化器自动生成的统计会由   ALTER   COLUMN   自动除去。 
    用在   PRIMARY   KEY   或   [FOREIGN   KEY]   REFERENCES   约束中的列。 
    用在   CHECK   或   UNIQUE   约束中的列,除非用在   CHECK   或   UNIQUE   约束中的可变长度列的长度允许更改。 
    有相关联的默认值的列,除非在不更改数据类型的情况下允许更改列的长度、精度或小数位数。   
    有些数据类型的更改可能导致数据的更改。例如,将数据类型为   nchar   或   nvarchar   的列更改为   char   或   varchar   类型,将导致扩展字符的转换。有关更多信息,请参见   CAST   和   CONVERT。降低列的精度和小数位数可能导致数据截断。 
      

  11.   

    create table tb(a text)
    insert into tb values ('aaaaaa')
    goalter table tb alter column a char(255)
    goselect * from tbdrop table tb
      

  12.   

     在企业管理器里修改char不指定(默认16)字符生成脚本,改脚本的char长度执行..以下是生成格式:
    create table T(Col text)
    insert T select 'abcdex'
    goBEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    CREATE TABLE dbo.Tmp_T
    (
    Col char(255) NULL
    )  ON [PRIMARY]
    GO
    IF EXISTS(SELECT * FROM dbo.T)
     EXEC('INSERT INTO dbo.Tmp_T (Col)
    SELECT CONVERT(char(255), Col) FROM dbo.T (HOLDLOCK TABLOCKX)')
    GO
    DROP TABLE dbo.T
    GO
    EXECUTE sp_rename N'dbo.Tmp_T', N'T', 'OBJECT'
    GO
    COMMIT
      

  13.   

    create table tb(a text)
    insert into tb values ('aaaaaa')
    go--加个列B
    alter table tb add b char(255)
    go
    --将B设置为A的值
    update tb set b = cast(a as varchar)
    go
    --删除A
    alter table tb drop column a
    go
    --更改列名B为A
    EXEC sp_rename 'tb.[b]', 'a', 'COLUMN'
    goselect * from tbdrop table tb/*
    a                                                                                                                                                                                                                                                               
    ---------------------
    aaaaaa                                                                                                                                                                                                                                                         (所影响的行数为 1 行)
    */