sco*_*ttr 7 sql-server t-sql sql-server-2008-r2 alter-table drop-table
我们的数据库是 SQL Server 2008 R2。我们有一些表有一些 varchar(500) 列,我想切换到 datetime2 或 bigint。我可以保证要切换的列中的所有数据对于正确的类型都是有效的。列更改确实会影响索引,但不会影响键。
在与同事讨论时,我们得出了两种解决问题的方法。这两个都将通过 T-Sql 脚本完成。
ALTER TABLE x ALTER COLUMN Y datetime2,然后重建或重新创建索引。因为我相信数据会干净利落地转换,所以我倾向于#2。我的同事和 DBA 朋友更喜欢 #1,但我的同事不记得他们为什么这样训练他。DBA 朋友正在休假,所以我没有问他为什么。
有人可以提供有关他们认为更好的选择以及为什么的见解吗?最终这是我的决定,我想知道为什么 #1 比 #2 更受欢迎?
Kin*_*hah 10
我最近在我的组织中做了这个,我们想要处理一个有十亿多行的表。
这个想法的所有功劳都归功于 Aaron Bertrand 并且来自他的博客文章Trick Shots : Schema Switch-A-Roo
在小桌子上测试下面的过程,并在 PROD 中进行之前让自己感到舒服。
fake并shadow获得授权dbo。shadow模式中的列和数据类型,例如create table shadow.Correct_Table ...shadow架构表中的所有索引。shadow架构更新表上的统计信息。切换模式(这是元数据操作,速度非常快)
--- ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
BEGIN TRANSACTION;
ALTER SCHEMA fake TRANSFER dbo.original_table;
ALTER SCHEMA dbo TRANSFER shadow.Correct_Table;
COMMIT TRANSACTION;
ALTER SCHEMA shadow TRANSFER fake.Lookup;
Run Code Online (Sandbox Code Playgroud)做最后的检查,看看一切是否按计划进行。你应该做一个select count(1) from dbo.Correct_table
确认第 7 步并且您感到满意后,将shadow.table, shadowschema 和fakeschema删除为清理。