如何更改SQL Server中列的数据类型?

Asc*_*ian 330 t-sql sql-server alter-table type-conversion sql-server-2008

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

cms*_*sjr 547

ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]
Run Code Online (Sandbox Code Playgroud)

编辑 如前所述,应该指定NULL/NOT NULL,请参阅Rob的答案.

  • @TheincredibleJan那会很酷,但不幸的是它不会那样工作.如果你发出一个`ALTER TABLE TableName ALTER COLUMN ColumnName`命令来改变一个现有的列``[NOT NULL]`,你没有明确指定它,那么之后它将是`[NULL]`,因为那是默认的. (3认同)
  • 仅当您在该列上没有约束和索引时,此方法才有效,否则,您需要删除所有内容并重新创建它,这是繁琐而繁琐的工作,尤其是当该列上有许多外部引用时。例如,当从tinyint更改为int时。 (3认同)
  • 为什么要指定它?有什么好处?我想,我想保持原样的一切都不必提及。 (2认同)

Rob*_*son 170

不要忘记可空性.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
Run Code Online (Sandbox Code Playgroud)

  • ^在alter table语句完成执行后,它将默认为NULL,而不显式定义它应该是什么. (6认同)
  • 可空性有什么问题?如果我不想更改它 - 再次设置它有什么好处? (3认同)
  • @sc305495 确切地说,它将默认为您的 ANSI_NULL_DEFAULT 设置。 (2认同)

Joh*_*som 22

使用Alter表语句.

Alter table TableName Alter Column ColumnName nvarchar(100)
Run Code Online (Sandbox Code Playgroud)


小智 11

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

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;
Run Code Online (Sandbox Code Playgroud)

例如:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

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

看到这里


小智 9

ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL
Run Code Online (Sandbox Code Playgroud)

  • 这似乎并没有在几年前现有的已接受答案上添加任何内容,而且您发布到表结构的更改实际上与问题不匹配。 (4认同)

Ale*_*nov 6

用于更改数据类型

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]
Run Code Online (Sandbox Code Playgroud)

用于更改主键

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
Run Code Online (Sandbox Code Playgroud)


joc*_*sid 5

只要您增加 varchar 的大小就可以了。根据更改表参考:

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