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

时间:2014-05-27 22:03:45

标签: c# .net sql-server

microsoft sql server数据库内,我有User列,其中包含Password列。 Password的类型为varchar(50),我想更改为varchar(255)

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

  

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

User
xx
xx
xx

选择是的我正在等待整个分钟,鼠标光标忙,我要回来了

  

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

我很困惑,因为我没有改变任何东西,只有这一长度的密码专栏。

是否有任何简单的方法可以完成此简单操作,将varchar(50)更改为varchar(255)

1 个答案:

答案 0 :(得分:3)

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

相反,由于您实际上只是要求在列中保留相同的基础数据类型的更多空间,您可以使用简单的双线程直接更改列的数据类型:

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

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

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