Как удалить уникальное ограничение из столбца таблицы? - PullRequest
20 голосов
/ 31 марта 2011

У меня есть таблица 'users' со столбцом 'login', определенным как:

[login] VARCHAR(50) UNIQUE NOT NULL

Теперь я хочу удалить это уникальное ограничение / индекс с помощью сценария SQL.Я нашел его имя UQ_ users _7D78A4E7 в моей локальной базе данных, но я полагаю, у него другое имя в другой базе данных.

Каков наилучший способ отбросить этот уникальныйограничение?Или хотя бы какое-нибудь ...

Спасибо.

Ответы [ 11 ]

33 голосов
/ 31 марта 2011
ALTER TABLE users
DROP CONSTRAINT 'constraints_name'
21 голосов
/ 10 февраля 2012

SKINDER, ваш код не использует имя столбца.Правильный сценарий:

declare @table_name nvarchar(256)  
declare @col_name nvarchar(256)  
declare @Command  nvarchar(1000)  

set @table_name = N'users'
set @col_name = N'login'

select @Command = 'ALTER TABLE ' + @table_name + ' drop constraint ' + d.name
    from sys.tables t 
    join sys.indexes d on d.object_id = t.object_id  and d.type=2 and d.is_unique=1
    join sys.index_columns ic on d.index_id=ic.index_id and ic.object_id=t.object_id
    join sys.columns c on ic.column_id = c.column_id  and c.object_id=t.object_id
    where t.name = @table_name and c.name=@col_name

print @Command

--execute (@Command)
7 голосов
/ 26 ноября 2014

Чтобы удалить ограничение UNIQUE, вам не нужно имя ограничения, просто список столбцов, включенных в ограничение.

Синтаксис будет:

ALTER TABLE table_name DROP UNIQUE (column1, column2, . . . )
7 голосов
/ 03 октября 2014

Это работает в основном.

drop index IX_dbo_YourTableName__YourColumnName on dbo.YourTableName
GO
3 голосов
/ 23 апреля 2015

Используйте эту команду SQL для удаления уникального ограничения:

ALTER TABLE tbl_name
DROP INDEX column_name
1 голос
/ 19 сентября 2016

Это утверждение работает для меня

  ALTER TABLE table_name DROP UNIQUE (column_name);
1 голос
/ 01 января 2013

Вы можете использовать следующий скрипт:

Declare @Cons_Name NVARCHAR(100)
Declare @Str NVARCHAR(500)

SELECT @Cons_Name=name
FROM sys.objects
WHERE type='UQ' AND OBJECT_NAME(parent_object_id) = N'TableName';

---- Delete the unique constraint.
SET @Str='ALTER TABLE TableName DROP CONSTRAINT ' + @Cons_Name;
Exec (@Str)
GO
0 голосов
/ 06 июня 2017

Я бы хотел сослаться на предыдущий вопрос, потому что я столкнулся с той же проблемой и решил это решение .Прежде всего, ограничение всегда строится со значением Hash в его имени.Так что проблема в том, что HASH меняется на разных машинах или в базах данных.Например, DF__Companies__IsGlo__6AB17FE4 здесь 6AB17FE4 - это значение хеша (8 бит).Так что я имею в виду один скрипт, который будет плодотворным для всех

DECLARE @Command NVARCHAR(MAX)
     declare @table_name nvarchar(256)
     declare @col_name nvarchar(256)
     set @table_name = N'ProcedureAlerts'
     set @col_name = N'EmailSent'

     select @Command ='Alter Table dbo.ProcedureAlerts Drop Constraint [' + ( select d.name
     from 
         sys.tables t
         join sys.default_constraints d on d.parent_object_id = t.object_id
         join sys.columns c on c.object_id = t.object_id
                               and c.column_id = d.parent_column_id
     where 
         t.name = @table_name
         and c.name = @col_name) + ']'

    --print @Command
    exec sp_executesql @Command

. Он снимет ограничения по умолчанию.Однако, если вы хотите создать его снова, вы можете просто попробовать это

ALTER TABLE [dbo].[ProcedureAlerts] ADD DEFAULT((0)) FOR [EmailSent]

Наконец, просто выполните команду DROP, чтобы удалить столбец.

0 голосов
/ 20 декабря 2016

Развернуть до имени базы данных >> развернуть до таблицы >> развернуть до ключей >> скопировать имя ключа и выполнить следующую команду:

ALTER TABLE Test DROP UQ__test__3213E83EB607700F;

Здесь UQ__test__3213E83EB607700F - это имя уникального ключа, созданного в определенном столбце тестовой таблицы.

0 голосов
/ 12 апреля 2016

Если вы знаете имя вашего ограничения, вы можете напрямую использовать команду, например

изменить пользователей таблицы, удалить ограничение имя-ограничения;

Если вы не знаете имя ограничения, вы можете получить ограничение с помощью этой команды

выберите имя-ограничения, тип-ограничения от user_constraints где table_name = 'ВАШЕ ИМЯ ТАБЛИЦЫ';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...