我已经完成了以前的问题Q1,Q2,Q3。使用这个我可以捕获我的确切约束名称。但这对我来说还不够。
例如我做了一些事情
ALTER TABLE dbo.Documents ADD ShowOnHandset BIT NOT NULL DEFAULT 'FALSE'
这里我机器上的机器名DF__Documents__ShowO__7AB2122C
自动命名。但我在多台PC上运行相同的脚本,在那些PC上,除了最后一个哈希值之外,这些约束几乎相同。 DF__Documents__ShowO__54A20B0D
DF__Documents__ShowO__5D5216D7
我已经看到最后8位的散列值不相似。但我需要从所有表中删除此约束,我想用
替换它们ALTER TABLE dbo.Documents ADD ShowOnHandset BIT NOT NULL DEFAULT ((1))
但我无法识别确切的约束名称,那么如何使用单个脚本删除它呢?
我已经通过上述问题找到了硬编码解决方案。但我需要一个脚本来完成它。请帮我解决这个问题。
我可以使用此代码
捕获约束名称select name from sys.objects where name like 'DF__Documents__ShowO%'
我知道如何删除它。在这里。
ALTER TABLE dbo.AppSystems DROP constraint [constraint_name]
但我无法做到。因为即使我能抓住它,我也无法设置值constraint_name
。那么我怎么能把这个名字放在这里放弃它。
更新修改了问题。
答案 0 :(得分:1)
运行此项并以文本形式输出,然后复制结果并在另一个查询窗口中运行
Fritz使用下面的代码来添加更新的约束:
;With cte As (select object_id From sys.objects where name like 'DF__Documents__ShowO%')
Select 'Alter Table ' + Object_Name(df.object_id) + N' Add Constraint Default (1) For ShowOnHandset'
From sys.default_constraints As df
Join cte As c
On c.object_id = df.object_id
这会删除约束
;With cte As (select object_id From sys.objects where name like 'DF__Documents__ShowO%')
Select 'Alter Table ' + Object_Name(df.object_id) + N' Drop Constraint [' + df.Name + ']'
From sys.default_constraints As df
Join cte As c
On c.object_id = df.object_id
答案 1 :(得分:1)
尝试动态查询:
Declare @MyVariable varchar(max)
Declare @Variable varchar(max)
Set @MyVariable=(Select name from sys.objects
where parent_object_id=Object_ID('Documents','U') and name like 'DF__Documents__Show%')
Set @variable='ALTER TABLE dbo.AppSystems DROP constraint' +@MyVariable
Exec(@variable)
答案 2 :(得分:0)
在MS SQL中,您可以指定约束名称explicit:
ALTER TABLE dbo.Documents ADD ShowOnHandset BIT NOT NULL CONSTRAINT DF_Documents_ShowOnHandset DEFAULT 'FALSE'