sql-server - 在不知道约束名称的情况下删除列上的约束
问题描述
我想对多个数据库中的列进行约束。我不知道列上约束的确切名称。
是否可以在不知道其名称的情况下删除约束。
例如:ALTER TABLE TempTable DROP CONSTRAINT IF EXISTS ON Columnname
解决方案
您可以从这样的表中检索约束信息
select t.Name as TableName,
ccd.Name as ColumnName_default_constraint,
dc.Name as default_constraint,
ccc.Name as ColumnName_check_constraint,
cc.Name as check_constraint
from sys.tables t
inner join sys.default_constraints dc on t.object_id = dc.parent_object_id
inner join sys.check_constraints cc on t.object_id = cc.parent_object_id
inner join sys.columns ccd on dc.parent_object_id = ccd.object_id
and ccd.column_id = dc.parent_column_id
inner join sys.columns ccc on cc.parent_object_id = ccc.object_id
and ccc.column_id = cc.parent_column_id
where t.Name = 'your table name'
order by t.Name
从这里你可以构建这样的脚本
select 'alter table ' + t.Name +' drop constraint ' + dc.Name,
'alter table ' + t.Name +' drop constraint ' + cc.Name
from sys.tables t
inner join sys.default_constraints dc on t.object_id = dc.parent_object_id
inner join sys.check_constraints cc on t.object_id = cc.parent_object_id
where t.Name = 'your table name'
order by t.Name
推荐阅读
- c# - SqlCommand Parameter & CommandText 声明的顺序是否重要?
- c++ - 遍历 YAML::Node 时如何获取当前节点的父节点?
- c# - 在 C# 中反序列化具有 CamelCase 和 snake_case 命名键的 JSON
- aws-lambda - 为什么在执行调用 cognito lambda 触发 PostConfirmation 和 PreTokenGeneration 的开玩笑测试时会出现随机错误?
- dart - 有没有办法从命令行应用程序注入键盘事件?
- javascript - 如何让我的 html 输入元素影响我的 javascript 类对象值(字符名称)
- python - 有没有一种简单有效的方法来使用 pygame 为平台游戏编写 python 中的跳跃和重力逻辑代码?
- c++ - 当我从文件中读取时,我得到了控制字符
- java - Derby 如何在现有列上添加 NOT NULL 约束
- selenium - 如何在python中总是将+1添加到0