我有一个包含以下语句的迁移脚本:
ALTER TABLE [Tasks] ALTER COLUMN [SortOrder] int NOT NULL
如果我跑两次会怎么样?它会第二次改变吗? MS SQL Management Studio只报告"命令已成功完成",但没有详细说明他们是否确实做了任何事情。
如果它还不是idempotent,我该怎么做呢?
答案 0 :(得分:2)
我想说第二次,SQL Server检查元数据并且什么也不做,因为没有任何改变。
但如果您不喜欢多次执行的可能性,可以在脚本中添加简单的条件:
glBindBuffer
的 SqlFiddleDemo
强>
答案 1 :(得分:1)
第二次执行时,会执行查询但由于表已经更改,因此无效。所以它对桌面没有任何影响。
当脚本执行两次时,没有任何更改。
这是一篇很好的MSDN阅读:Inside ALTER TABLE
让我们看看SQL Server在执行ALTER时内部执行的操作 TABLE命令。 SQL Server可以在任何中执行ALTER TABLE命令 有三种方式:
- SQL Server可能只需要更改元数据。
- SQL Server可能需要检查所有现有数据以确保 它与更改兼容,但只更改元数据。
- SQL Server可能需要在物理上更改每一行。
醇>