【问题标题】:How to drop a Unique Constraint set on a single column如何在单个列上删除唯一约束集
【发布时间】:2013-09-24 02:38:41
【问题描述】:

我在下面创建了一个表格, "创建表 UNIQ(NUM INT UNIQUE, NAMES VARCHAR(10))"

现在我想删除/禁用在 NUM 列上设置的 UNIQUE 约束。 如何用 Query.. 做到这一点?

我用谷歌搜索并知道,如果我在创建表时给出约束名称,那么使用该名称我可以轻松删除约束。

前: CREATE TABLE UNIQ(NUM INT CONSTRAINT CONTR_NAME UNIQUE, NAMES VARCHAR(10))

对于删除约束。, ALTER TABLE UNIQ DROP CONSTRAINT CONTR_NAME

提前谢谢.. :)

谢谢

马赫什

【问题讨论】:

  • 即使您没有指定名称,约束也会以某种方式命名。找出名称并删除它。

标签: sql sql-server-2005


【解决方案1】:
ALTER TABLE UNIQ
DROP CONSTRAINT [name of constraint]

下面的查询应该可以帮助您找到约束的名称

SELECT
    o.name AS ConstraintName,
    c.name AS ColumnName
FROM sys.objects o
    JOIN sys.objects p
        ON o.parent_object_id = p.object_id
    JOIN sys.columns c
        ON c.object_id = p.object_id
WHERE o.type_desc LIKE '%CONSTRAINT'
AND p.Name = 'UNIQ'

【讨论】:

  • 好的,如果您提供了答案,请提供一种在您被否决之前找到约束名称的方法。这里的人投反对票的速度非常快
【解决方案2】:

试试这个:

DECLARE @ConstraintName VARCHAR(256)
SET @ConstraintName = (
     SELECT             obj.name
     FROM               sys.columns col 

     LEFT OUTER JOIN    sys.objects obj 
     ON                 obj.object_id = col.default_object_id 
     AND                obj.type = 'UQ' 

     WHERE              col.object_id = OBJECT_ID('TableName') 
     AND                obj.name IS NOT NULL
     AND                col.name = 'ColunmName'
)   

IF(@ConstraintName IS NOT NULL)
BEGIN
    EXEC ('ALTER TABLE [TableName] DROP CONSTRAINT ['+@ConstraintName+']')
END

【讨论】:

  • 执行成功但没有禁用约束
  • 理想情况下它应该禁用。尝试打印ConstraintName 看看它是否工作。之后您可以通过编写查询ALTER TABLE [TableName] DROP CONSTRAINT ['+@ConstraintName+']' 手动删除它
猜你喜欢
  • 1970-01-01
  • 2017-02-23
  • 2011-07-26
  • 2012-09-02
  • 2012-04-18
  • 2021-08-03
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多