【问题标题】:How do you change the datatype of a column in SQL Server?如何更改 SQL Server 中列的数据类型?
【发布时间】:2010-10-12 05:33:13
【问题描述】:

我正在尝试将列从 varchar(50) 更改为 nvarchar(200)。更改此表的 SQL 命令是什么?

【问题讨论】:

    标签: sql-server tsql type-conversion alter-table


    【解决方案1】:
    ALTER TABLE [Performance].[dbo].[CRA_283_Violation]
    ALTER COLUMN [Throughput_HS_DC_NodeB_3G_Alarm] bit
    

    【讨论】:

      【解决方案2】:

      在 11g 中:

      ALTER TABLE TableName
      Modify ColumnName DataType;
      

      例如: ALTER TABLE 员工 修改 BIRTH_DATE VARCHAR(30);

      【讨论】:

        【解决方案3】:
        ALTER TABLE [dbo].[TableName]
        ALTER COLUMN ColumnName VARCHAR(Max) NULL
        

        【讨论】:

        • 这似乎没有比几年前现有的已接受答案添加任何内容,而且您发布到表结构的更改实际上与问题不匹配。
        【解决方案4】:
        ALTER TABLE TableName 
        ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]
        

        编辑 如前所述,应指定 NULL/NOT NULL,另请参阅 Rob's answer

        【讨论】:

        • 为什么要指定?有什么好处?我想,我想留下的一切我都不必提及。
        • @TheincredibleJan 那会很酷,但不幸的是它不能那样工作。如果您发出ALTER TABLE TableName ALTER COLUMN ColumnName 命令来更改现有列[NOT NULL],并且您没有明确指定它,那么之后它将是[NULL],因为这是默认值。
        • 这仅在您对该列没有约束和索引的情况下才有效,否则,您需要删除所有内容并重新创建它,这是一项乏味且繁重的工作,特别是如果您有很多外国引用那一栏。例如从 tinyint 更改为 int 时。
        • 如果您打开了 IDE(如 SSMS),请小心。即使在我正在更改的表上关闭了我的设计器选项卡(在运行脚本并右键单击表以选择“设计”之后),它仍然显示旧的数据类型!只有在 Management Studio 中关闭我的所有选项卡并再次打开设计视图后,它才最终显示更新的 DataType。非常可怕,所以要小心(它可能是一个现在已经修复的缓存错误,或者一个 MS 从不费心修复)。对于那些想知道为什么我在使用 Design-View 时运行 T-SQL 的人,我想将我的 DataTypes 更改为 SysName(SSMS 不允许这样做)。
        • 我对 XAMPP 中的这些命令不满意。ALTER TABLE table MODIFY COLUMN column datatype 为我工作。
        【解决方案5】:

        用于更改数据类型

        alter table table_name 
        alter column column_name datatype [NULL|NOT NULL]
        

        用于更改主键

        ALTER TABLE table_name  
        ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
        

        【讨论】:

          【解决方案6】:

          在 SQL Server (Transact-SQL) 中修改现有表中的列的语法是:

          ALTER TABLE table_name
              ALTER COLUMN column_name column_type;
          

          例如:

          ALTER TABLE employees
              ALTER COLUMN last_name VARCHAR(75) NOT NULL;
          

          此 SQL Server ALTER TABLE 示例会将名为 last_name 的列修改为 VARCHAR(75) 的数据类型,并强制该列不允许空值。

          here

          【讨论】:

          • 请在您的答案中添加更多信息并格式化代码/查询!
          【解决方案7】:

          试试这个:

          ALTER TABLE "table_name"
          MODIFY "column_name" "New Data Type";
          

          【讨论】:

          • “修改”显然是不正确的。请与其他答案进行比较。
          • 这是旧的,但似乎 Kai Tzer 正在证明 MySql 和/或 Oracle DDL。
          • 同意Sheldon,这里的答案对我的oracle sql没有帮助,只是这个
          【解决方案8】:

          只要增加 varchar 的大小就可以了。根据Alter Table 参考:

          降低列的精度或小数位数可能会导致数据截断。

          【讨论】:

            【解决方案9】:

            使用 Alter table 语句。

            Alter table TableName Alter Column ColumnName nvarchar(100)
            

            【讨论】:

              【解决方案10】:

              不要忘记可空性。

              ALTER TABLE <schemaName>.<tableName>
              ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
              

              【讨论】:

              • 可空性是怎么回事?如果我不想更改它 - 再次设置它有什么好处?
              • ^ 在alter table 语句执行完成后,它会默认为NULL,而没有明确定义它应该是什么。
              • @sc305495 确切地说,它会默认为您的 ANSI_NULL_DEFAULT 设置。
              猜你喜欢
              • 1970-01-01
              • 2016-10-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-17
              相关资源
              最近更新 更多