在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)
答案 0 :(得分:3)
当您使用设计器进行更改时,SSMS会生成一个巨大的脚本,用于创建新的临时表,将旧数据中的所有数据转储到临时表中,删除旧表,然后重命名临时表回到原始名称的名称。它也足够聪明,可以删除外键,约束等,然后尝试将它们全部放回去。根据表的复杂程度,脚本可以长达数百或数千行。
相反,由于您实际上只是要求在列中保留相同的基础数据类型的更多空间,您可以使用简单的双线程直接更改列的数据类型:
ALTER TABLE [dbo].[User]
ALTER COLUMN [Password] varchar(255) NOT NULL
GO
(根据列是否可为空,调整脚本,具有默认值等)
当然,在执行任何此操作之前,您应该备份该表所在的数据库。您可能还需要删除与数据库的现有连接。可能是脚本在进行任何工作之前都在等待对表的独占访问。