如何在迁移中自动删除约束DF_



我有这样的表格:

create table job_results
(
id                bigint identity
constraint pk_job_results
primary key,
created           datetime2,
deleted           datetime2,
updated           datetime2,
job_id            varchar(255)      not null
constraint fk_job_results__job_id
references jobs,
location          varchar(1024)     not null,
sent_successfully bit     default 1 not null,
send_attempts     tinyint default 0 not null,
is_partial        tinyint default 1 not null
)

现在,我使用 flyway 进行迁移,当我无法创建将is_partialtinyint更改为bit的迁移时,我遇到了这个问题,因为 MSSQL 创建了约束,这会阻止名为DF__job_resul__is_pa__3632CAAD的迁移 - 通常我会删除它,但这个约束具有后缀3632CAAD,它是随机生成的,因此, 当我清理数据库并再次运行 Flyway 时,约束不会被删除,因为它不存在,而且我不知道当前的后缀可以删除它。

那么,有没有办法,如何通过一些正则表达式或其他东西自动删除这个特定的约束?

我当前的迁移如下:

alter table job_results
alter column is_partial bit not null;
go

和错误消息:

SQL State  : S0001
Error Code : 5074
Message    : The object 'DF__job_resul__is_pa__3632CAAD' is dependent on column 'is_partial'.

我最终设法将这个 https://stackoverflow.com/a/10758357/7169288 解决方案用于我的情况,因此最终迁移如下:

DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS WHERE PARENT_OBJECT_ID = OBJECT_ID('job_results') AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns WHERE NAME = N'is_partial' AND object_id = OBJECT_ID(N'job_results'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE job_results DROP CONSTRAINT ' + @ConstraintName)
go
alter table job_results
alter column is_partial bit not null;
go

最新更新