架构更改表重建
回答
在标准化CREATE-COPY-DROP-RENAME(CCDR)策略时,您可能会更好,并且只在少数情况下尝试进行原地更改,其中DDL不需要重建,而不是尝试编译穷举名单。这是此处描述的策略:link。
AFAIK,你只允许将列添加到现有的表(没有重建)如果该列是:
- 添加到表AND
- 的端部可为空的或具有默认约束
在其他情况下,MSSQL会可能失败,如果它不知道在新添加的列或数据行的值用什么损失是一个结果(例如截断)。即使是在中间加入的违约列也会强制重建。
使事情进一步复杂化,在某些情况下,部署的成功取决于表中的数据类型,而不仅仅是涉及的模式。例如,将列长度更改为更大的值(varchar(50) --> varchar(100)
)可能会成功;然而,减少长度只有有时允许。迁移数据类型变化是另一个棘手的问题。
总之,我会总是重建和很少改变到位。
-
为了说明行数据影响结果:
create table dbo.Yak(s varchar(100));
insert into dbo.Yak
values(replicate('a', 100));
go
-- attempt to alter datatype to 50 (FAIL: String or binary data would be truncated.)
alter table dbo.Yak
alter column s varchar(50);
go
-- shorten the data in row to avoid data loss
delete from dbo.Yak;
insert into dbo.Yak
values(replicate('a', 50));
go
-- again, attempt to alter datatype to 50 (SUCCESS)
alter table dbo.Yak
alter column s varchar(50);
go
select len(s),* from dbo.Yak;
go
--cleanup
drop table dbo.Yak;
go
这是一个很棒的阅读。做得好。 – Darthg8r
在Management Studio中,选择要更改的表并右键单击设计。更改表格设计窗口中列的数据类型(用int测试钱)。
不是保存,而是在窗口中右键单击并选择“生成更改脚本”。复制对话框中的SQL语句。
*)在以前的版本(SQL2000)中,任何更改都会重新创建整个表格(据我所知)。看来,重命名和添加列已针对ALTER TABLE语句进行了优化。
是的,这是如何找出来的;但是,问题是如何去做 – zanlok
我通过使用Visual Studio数据库项目来管理这样的事情变得非常溺爱。一旦我的模式被导入到项目中,我可以进行任何我想要的更改,并且VSDP将确定是否可以在不删除对象(例如使用ALTER)的情况下完成更改,或者是否需要创建新的对象和复制值从旧的(它自动执行)。
计划一个小小的工作来了解如何将其融入到您的特定环境和工作流程中,但我发现这项工作非常值得。
- 1. 架构更改
- 2. 实体框架和更改表格架构/结构
- 3. 在sql 2005中更改表架构
- 4. 防止Hibernate架构更改
- 5. JDBC更改默认架构
- 6. 处理MongoDB架构更改
- 7. 更改架构名称
- 8. 如何使用Laravel架构构建器更改列类型?
- 9. Dynamodb2表架构创建
- 10. 创建Azure表架构
- 11. 构建用户更新仪表板活动的架构ala facebook
- 12. 更改结构表
- 13. 重构XSD架构
- 14. 重命名应用程序不会更改架构
- 15. MySQL表更改表结构
- 16. 使用Microsoft同步框架2.1更新架构更改
- 17. TFS构建架构
- 18. 构建的架构
- 19. 在更改IosGraphics.java后更新和重新构建libGDX
- 20. MsBuild:在更改构建配置时强制重建
- 21. 更改Eclipse构建命令
- 22. 重复架构
- 23. Django sqlite - 如何更改架构
- 24. JPA - EclipseLink - 如何更改默认架构
- 25. 跟踪MySQL架构和程序更改
- 26. 更改架构不起作用
- 27. 更改语法中的关联架构
- 28. Web API更改架构名称
- 29. 更改猫鼬架构视图模型
- 30. Oracle:根据角色更改架构
你是什么意思“重建?”丢弃并重新创建? –
是的,丢弃,重新创建和重新插入数据。 – Darthg8r