将db列的大小从varchar50更改为varchar255

本文关键字:varchar50 varchar255 db | 更新日期: 2023-09-27 18:05:22

microsoft sql server数据库中,我有表User,列PasswordPassword的类型为varchar(50),我想更改为varchar(255)

我尝试使用microsoft sql server management studio和使用设计视图,我尝试手动将50更改为255,但在保存该操作时,我收到警报

以下表将被保存到您的数据库中。你想继续吗?

User
xx
xx
xx

在选择yes时,我正在等待整个min,鼠标光标很忙,我正在返回

在保存过程中遇到错误。没有保存某些数据库对象。用户表,无法删除关系FK.....超时过期。

我很困惑,因为我没有改变任何东西,但这个长度的密码列。

有没有简单的方法来完成这个简单的操作,把varchar(50)改成varchar(255)

将db列的大小从varchar50更改为varchar255

当您使用设计器进行更改时,SSMS在幕后生成一个巨大的脚本,该脚本创建一个新的临时表,将旧表中的所有数据转储到临时表中,删除旧表,然后将临时表重命名为原始名称。它还足够聪明,可以删除外键、约束等,然后再尝试将它们全部放回来。根据表的复杂程度,脚本可能长达数百或数千行。

相反,由于您实际上只是要求在保持相同底层数据类型的列中增加一点空间,因此您可以使用简单的两行代码直接更改列的数据类型:

ALTER TABLE [dbo].[User]
    ALTER COLUMN [Password] varchar(255) NOT NULL
GO

(根据列是否为空、是否有默认值等调整脚本)

当然,在执行任何操作之前,您应该对表所在的数据库进行备份。您可能还需要删除到数据库的现有连接。可能是脚本在执行任何操作之前等待对表的独占访问。