Mat*_*n L 27 sql sql-server sql-server-2008
我正在使用SQL Server 2008,我有一个包含大约50毫米行的表.
该表包含类型的主标识列int
.
我想将该列升级为bigint
.
我需要知道如何以快速的方式做到这一点,这将不会使我的数据库服务器不可用,并且不会删除或破坏我的任何数据
我该怎么做才能做到最好?这样做会带来什么后果?
mar*_*c_s 26
嗯,这不会是一种快速的方式,真的....
我的方法是:
创建一个具有相同结构的新表 - 除了ID
列而BIGINT IDENTITY
不是INT IDENTITY
---- [在这里将您的服务器置于独占的单用户模式; 用户不能从这一点开始使用你的服务器] ----
查找并禁用引用表的所有外键约束
转 SET IDENTITY_INSERT (your new table) ON
将旧表中的行插入新表中
转 SET IDENTITY_INSERT (your new table) OFF
删除旧表
将新表重命名为旧表名
更新所有对您的表有FK引用的表BIGINT
而不是INT
(应该可以简单地使用ALTER TABLE ..... ALTER COLUMN FKID BIGINT
)
再次重新创建所有外键关系
现在,您可以再次将服务器恢复为正常的多用户使用状态
Mob*_*Mon 16
我错过了什么?
为什么你不能这样做:
ALTER TABLE tableName ALTER COLUMN ID bigint
Run Code Online (Sandbox Code Playgroud)
我想首先在测试环境中尝试它,但这总是适合我
可能最好的方法是创建一个带有BIGINT IDENTITY列的新表,使用SET IDENTITY_INSERT ON移动现有数据; 然后重命名表.您需要在维护窗口期间执行此操作,就像在Management Studio中更改数据类型一样(类似地创建新表,移动数据,并阻止过程中的每个人).
归档时间: |
|
查看次数: |
28137 次 |
最近记录: |