I’m trying to drop a constraint on a DB table, something like:
ALTER TABLE MyTable drop CONSTRAINT FK_MyTable_AnotherTable
But the execution just runs and runs. If I stop it I see:
Msg 3727, Level 16, State 0, Line 2
Could not drop constraint. See previous errors.
Web search throws up various pages but note that the constraint is properly named and I am trying to remove it using the correct name
asked Apr 7, 2010 at 13:53
DannykPowellDannykPowell
1,2275 gold badges18 silver badges30 bronze badges
0
I was having the same issue on SQL Server 2008 R2, I solved my problem with below line hopefully it will work for someone else as well
Alter Table [Table Name]
DROP Column [Column Name]
answered May 29, 2014 at 8:01
Zeeshan AjmalZeeshan Ajmal
8801 gold badge16 silver badges29 bronze badges
2
Found a way to sort this, although I don’t understand why it was necessary.
Have been able to drop the constraint by disabling it first:
ALTER MyTable NOCHECK CONSTRAINT FK_MyTable_AnotherTable
The drop then completes fine
Would still welcome any comments on the reason why this is necessary
answered Apr 7, 2010 at 14:54
DannykPowellDannykPowell
1,2275 gold badges18 silver badges30 bronze badges
1
Verify that you’ve not already dropped the constraint, like:
SELECT OBJECT_ID('FK_MyTable_AnotherTable')
If this returns null
, your constraint no longer exists. That would explain the error message.
answered Apr 7, 2010 at 13:56
3
I had same problem.
The reason was that I made a mistake in my cursor statement, which was iterating some constraint I was to drop.
So this error occurred when the constraint was actually removed in the same transaction. Then I did a rollback and checked if it existed: it did (of course, after rollback!).
Check if it really exists at the moment of dropping.
answered Dec 2, 2015 at 7:18
flam3flam3
1,8171 gold badge19 silver badges26 bronze badges
I’m trying to drop a constraint on a DB table, something like:
ALTER TABLE MyTable drop CONSTRAINT FK_MyTable_AnotherTable
But the execution just runs and runs. If I stop it I see:
Msg 3727, Level 16, State 0, Line 2
Could not drop constraint. See previous errors.
Web search throws up various pages but note that the constraint is properly named and I am trying to remove it using the correct name
asked Apr 7, 2010 at 13:53
DannykPowellDannykPowell
1,2275 gold badges18 silver badges30 bronze badges
0
I was having the same issue on SQL Server 2008 R2, I solved my problem with below line hopefully it will work for someone else as well
Alter Table [Table Name]
DROP Column [Column Name]
answered May 29, 2014 at 8:01
Zeeshan AjmalZeeshan Ajmal
8801 gold badge16 silver badges29 bronze badges
2
Found a way to sort this, although I don’t understand why it was necessary.
Have been able to drop the constraint by disabling it first:
ALTER MyTable NOCHECK CONSTRAINT FK_MyTable_AnotherTable
The drop then completes fine
Would still welcome any comments on the reason why this is necessary
answered Apr 7, 2010 at 14:54
DannykPowellDannykPowell
1,2275 gold badges18 silver badges30 bronze badges
1
Verify that you’ve not already dropped the constraint, like:
SELECT OBJECT_ID('FK_MyTable_AnotherTable')
If this returns null
, your constraint no longer exists. That would explain the error message.
answered Apr 7, 2010 at 13:56
3
I had same problem.
The reason was that I made a mistake in my cursor statement, which was iterating some constraint I was to drop.
So this error occurred when the constraint was actually removed in the same transaction. Then I did a rollback and checked if it existed: it did (of course, after rollback!).
Check if it really exists at the moment of dropping.
answered Dec 2, 2015 at 7:18
flam3flam3
1,7791 gold badge17 silver badges26 bronze badges
I’m trying to drop a constraint on a DB table, something like:
ALTER TABLE MyTable drop CONSTRAINT FK_MyTable_AnotherTable
But the execution just runs and runs. If I stop it I see:
Msg 3727, Level 16, State 0, Line 2
Could not drop constraint. See previous errors.
Web search throws up various pages but note that the constraint is properly named and I am trying to remove it using the correct name
asked Apr 7, 2010 at 13:53
DannykPowellDannykPowell
1,2275 gold badges18 silver badges30 bronze badges
0
I was having the same issue on SQL Server 2008 R2, I solved my problem with below line hopefully it will work for someone else as well
Alter Table [Table Name]
DROP Column [Column Name]
answered May 29, 2014 at 8:01
Zeeshan AjmalZeeshan Ajmal
8801 gold badge16 silver badges29 bronze badges
2
Found a way to sort this, although I don’t understand why it was necessary.
Have been able to drop the constraint by disabling it first:
ALTER MyTable NOCHECK CONSTRAINT FK_MyTable_AnotherTable
The drop then completes fine
Would still welcome any comments on the reason why this is necessary
answered Apr 7, 2010 at 14:54
DannykPowellDannykPowell
1,2275 gold badges18 silver badges30 bronze badges
1
Verify that you’ve not already dropped the constraint, like:
SELECT OBJECT_ID('FK_MyTable_AnotherTable')
If this returns null
, your constraint no longer exists. That would explain the error message.
answered Apr 7, 2010 at 13:56
3
I had same problem.
The reason was that I made a mistake in my cursor statement, which was iterating some constraint I was to drop.
So this error occurred when the constraint was actually removed in the same transaction. Then I did a rollback and checked if it existed: it did (of course, after rollback!).
Check if it really exists at the moment of dropping.
answered Dec 2, 2015 at 7:18
flam3flam3
1,7791 gold badge17 silver badges26 bronze badges
Вопрос:
Я использую Microsoft SQL Server 2005 и относительно новичок в SQL в целом.
В базе данных “Информация” существует связь между двумя таблицами “Ресурсы” и “Групповые_ресурсы”. Ресурсы имеют внешний ключ, “id”, в Group_Resources с именем “resource_id”. Существует ограничение внешнего ключа, “fk_gr_res_resources”, между двумя.
Я зарегистрирован как владелец базы данных и имею полные права на чтение/запись/создание/удаление.
Я хочу удалить ограничение внешнего ключа, поэтому я выполнил следующий запрос:
ALTER TABLE [Information].[group_resources] DROP CONSTRAINT fk_gr_res_resources
и получил следующую ошибку:
‘fk_gr_res_resources’ не является ограничением. Не удалось отказаться от ограничения. См. Предыдущие ошибки.
Я смущен, потому что это ограничение, и нет орфографических ошибок. Я собираюсь удалить это ненадлежащим образом? Удаляю ли я ограничение из неправильной таблицы? Любые предложения были бы очень благодарны, и, пожалуйста, не плачьте мне: я все-таки новичок в SQL.
Лучший ответ:
Вы получаете эту ошибку:
Msg 3728, Level 16, State 1, Line 1
'fk_gr_res_resources' is not a constraint.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.
Поскольку ограничение FK не существует!
Вы уверены, что Information
– это правильное имя схемы, а не dbo
?
1. Этот SQL докажет, что FK не существует:
SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources'
2. К сожалению, я ошибся в своем первоначальном ответе, вот правильный синтаксис для SQL Server:
ALTER TABLE <table_name>
DROP CONSTRAINT <foreignkey_name>
3. Пример для вашей базы данных:
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources
END;
4. Попробуйте запустить это:
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
ALTER TABLE Group_Resources
ADD CONSTRAINT fk_gr_res_resources
FOREIGN KEY (resource_id)
REFERENCES Resources(id) /* make sure Resources.id is a PRIMARY KEY */
END;
5. Затем попробуйте это и посмотрите, все ли вы получите эту ошибку:
ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources
Другой синтаксис был для MySQL, извините:
ALTER TABLE <table_name>
DROP FOREIGN KEY <foreignkey_name>
Спасибо за исправление меня OMG Ponies!
- Remove From My Forums
UNABLE to ADD or DROP a Constraint — SQL Complains!
-
Question
-
Hi all, I am trying to create a CONSTRAINT but for some reason T-SQL does not allow me to do that.
When I try to DROP a CONSTRAINT it says:
Msg 3728, Level 16, State 1, Line 13
‘DF_TBL_SyncTable_DEVUK‘ is not a constraint.
Msg 3727, Level 16, State 0, Line 13
Could not drop constraint. See previous errors.When I try to ADD a CONSTRAINT it says:
Msg 1781, Level 16, State 1, Line 14
Column already has a DEFAULT bound to it.
Msg 1750, Level 16, State 0, Line 14
Could not create constraint. See previous errors.For some reason I can’t win here. Can’t drop it nor can I create one. Any solution?
Code Snippet
ALTER TABLE TBL_SyncTable DROP CONSTRAINT DF_TBL_SyncTable_DEVUK
ALTER TABLE TBL_SyncTable ADD CONSTRAINT GOD_TBL_SyncTable_DEVUK DEFAULT 2 FOR DEVUK
Thanks for comments + suggestions.*UPDATE*
I am trying to use the following code to check if the SCHEMA exists but still no luck. For some reason when I create it and wrap an IF statement around it, it doesn’t detect the SCHEMA. Is something wrong with my code?
Code Snippet
IF EXISTS(
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = ‘dbo’
AND CONSTRAINT_NAME = ‘DF_TBL_SyncTable_DEVUK’
AND TABLE_NAME = ‘TBL_SyncTable’
)
SELECT * FROM TABLE_1
ELSE
ALTER TABLE TBL_SyncTable ADD CONSTRAINT DF_TBL_SyncTable_DEVUK DEFAULT 2 FOR DEVUK
- Remove From My Forums
UNABLE to ADD or DROP a Constraint — SQL Complains!
-
Question
-
Hi all, I am trying to create a CONSTRAINT but for some reason T-SQL does not allow me to do that.
When I try to DROP a CONSTRAINT it says:
Msg 3728, Level 16, State 1, Line 13
‘DF_TBL_SyncTable_DEVUK‘ is not a constraint.
Msg 3727, Level 16, State 0, Line 13
Could not drop constraint. See previous errors.When I try to ADD a CONSTRAINT it says:
Msg 1781, Level 16, State 1, Line 14
Column already has a DEFAULT bound to it.
Msg 1750, Level 16, State 0, Line 14
Could not create constraint. See previous errors.For some reason I can’t win here. Can’t drop it nor can I create one. Any solution?
Code Snippet
ALTER TABLE TBL_SyncTable DROP CONSTRAINT DF_TBL_SyncTable_DEVUK
ALTER TABLE TBL_SyncTable ADD CONSTRAINT GOD_TBL_SyncTable_DEVUK DEFAULT 2 FOR DEVUK
Thanks for comments + suggestions.*UPDATE*
I am trying to use the following code to check if the SCHEMA exists but still no luck. For some reason when I create it and wrap an IF statement around it, it doesn’t detect the SCHEMA. Is something wrong with my code?
Code Snippet
IF EXISTS(
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = ‘dbo’
AND CONSTRAINT_NAME = ‘DF_TBL_SyncTable_DEVUK’
AND TABLE_NAME = ‘TBL_SyncTable’
)
SELECT * FROM TABLE_1
ELSE
ALTER TABLE TBL_SyncTable ADD CONSTRAINT DF_TBL_SyncTable_DEVUK DEFAULT 2 FOR DEVUK
Я создал ограничение, проверяющее положительность столбца, и не могу отказаться от ограничения, а точнее, я даже не понимаю, что ограничение существует. При попытке сбросить ограничение выдается сообщение об ошибке:
ALTER TABLE dbo.Test
DROP CONSTRAINT chk_positive;
Сообщение 3728, уровень 16, состояние 1, строка 1 «chk_positive» не является ограничением. Сообщение 3727, уровень 16, состояние 0, строка 1 Не удалось сбросить ограничение. Посмотреть предыдущие ошибки
Но затем экспериментируя и пытаясь повторно добавить ограничение, предполагает, что оно уже существует.
ALTER TABLE dbo.Test
ADD CONSTRAINT chk_positive CHECK (n_example > 0);
Msg 547, уровень 16, состояние 0, строка 1 Оператор ALTER TABLE конфликтует с ограничением CHECK «chk_positive». Конфликт произошел в базе данных «…», таблице «dbo.Test», столбце «n_example».
Глядя на результаты SELECT * FROM sys.check_constraints
, нет упоминания об ограничении chk_positive
, однако есть другие ограничения, которые я создал.
Есть идеи, почему это может происходить? Любая помощь приветствуется.
3 ответа
Лучший ответ
В SQL Server пространством имен для имен ограничений является вся схема, а не только таблица.
Другими словами, две таблицы не могут иметь одно и то же имя ограничения. Обычно, когда я называю ограничения, я включаю имя таблицы (в вашем случае, chk_test_positive
было бы более вероятным именем).
Вы можете использовать information_schema.table_constraints
, чтобы увидеть список ограничений. Должен быть chk_positive
, который определен в другой таблице.
Мой совет: включите имя таблицы в имя ограничения.
2
Gordon Linoff
21 Ноя 2016 в 01:57
Постарайтесь показать все ограничения. Я предполагаю, что это проблема с заглавными буквами, попробуйте использовать []
SELECT OBJECT_NAME(object_id) AS ConstraintName,
SCHEMA_NAME(schema_id) AS SchemaName,
OBJECT_NAME(parent_object_id) AS TableName,
type_desc AS ConstraintType
FROM sys.objects
WHERE type_desc LIKE ‘%CONSTRAINT’
0
Juan Carlos Oropeza
21 Ноя 2016 в 01:52
Выполните следующий запрос в базе данных, с которой вы работаете. Вы получите уже созданное контрольное ограничение (если оно есть) и соответствующее имя таблицы. Как другие догадались, созданное вами контрольное ограничение могло быть ошибочно создано в какой-то другой таблице. Тогда вы можете действовать соответственно.
select
cc.name
,cc.object_id
,SysObj.name "TableName"
,cc.parent_object_id
FROM sys.check_constraints cc
INNER JOIN sys.objects SysObj
on cc.parent_object_id=SysObj.object_id
WHERE LOWER(cc.name) LIKE '%positive%'
0
Santhoshkumar LM
21 Ноя 2016 в 08:17
Вы получаете эту ошибку:
Msg 3728, Level 16, State 1, Line 1
'fk_gr_res_resources' is not a constraint.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.
Потому что ограничения FK не существует!
Вы уверены, что Information
правильное имя схемы, а не dbo
?
1. Этот SQL докажет, что FK не существует:
SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources'
2. К сожалению, я ошибся в своем первоначальном ответе, вот правильный синтаксис для SQL Server:
ALTER TABLE <table_name>
DROP CONSTRAINT <foreignkey_name>
3. Пример для вашей базы данных:
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources
END;
4. Попробуйте запустить это:
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
ALTER TABLE Group_Resources
ADD CONSTRAINT fk_gr_res_resources
FOREIGN KEY (resource_id)
REFERENCES Resources(id) /* make sure Resources.id is a PRIMARY KEY */
END;
5. Затем попробуйте это и посмотрите, появляется ли эта ошибка по-прежнему:
ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources
Другой синтаксис был для MySQL, извините:
ALTER TABLE <table_name>
DROP FOREIGN KEY <foreignkey_name>
Спасибо, что поправили меня, OMG Ponies!
-
13.03.2017, 08:34
#1
Обновление GK
Господа, подскажите, может кто сталкивался. Обновляю БД с 3.25 до 3.33.
Делаю это через SQL Managment Studio 2012.
После выполнения первого скрипта 3.25-3.26 ругается на следующую строчку
ALTER TABLE [gk].[GK_CARDS_EX] DROP CONSTRAINT [CHECK_GK_CARDS_NAME]
Внимание! Изменение любой части имени объекта может разрушить скрипты и хранимые процедуры.
Сообщение 3728, уровень 16, состояние 1, строка 6
CHECK_GK_CARDS_NAME не является ограничением.
Сообщение 3727, уровень 16, состояние 0, строка 6
Нельзя удалить ограничение. См. предыдущие ошибки.
Если игнорировать данное предупреждение, то дальнейшие скрипты до 3.33 проходят без ошибок.
У меня знания в SQL и структуре БД GK не очень.
Насколько это критично? Можно ли игнорировать или следует данную строчку как-то обработать перед выполнением скрипта 3.25-3.26Печатные формы, отчёты, выгрузки для ПО Shelter 2 / Shelter 1 / Abonement
skype: alexem64, email: semenenkoav@gmail.com
-
13.03.2017, 13:43
#2
Разбирающийся
Я в SQL примерно как и ты, но чтение доки говорит о том что:
…На данном этапе мы познакомились со всеми видами ограничений, в их самом простом виде, которые создаются командой вида «ALTER TABLE имя_таблицы ADD CONSTRAINT имя_ограничения …»:
- PRIMARY KEY – первичный ключ;
- FOREIGN KEY – настройка связей и контроль ссылочной целостности данных;
- UNIQUE – позволяет создать уникальность;
- CHECK – позволяет осуществлять корректность введенных данных;
- DEFAULT – позволяет задать значение по умолчанию;
- Так же стоит отметить, что все ограничения можно удалить, используя команду «ALTER TABLE имя_таблицы DROP CONSTRAINT имя_ограничения».
DROP CONSTRAINT снимает ранее наложенное ограничение с поля таблицы.
У тебя в ответе на команду говорится о том что невозможно снять ограничение т.к. на это поле никакх ограничений и так нет.Отсюда выходит что ошибка не критичная.
Если есть под рукой не апгрейженая БД — посмотри есть ли на этом поле какие то DAFAULT, PRIMARY и т.п.
Скорее всего их нет (либо они снялись где то раньше по ходу апгрейдаИльин Александр, Компания «Соттос»
г Новосибирск +7 (383) 373-96-98; +7 (909) 533-93-92; nsk@sottos.ru
г Омск +7 (3812) 377-902; +7 (905) 098-92-06; abc@sottos.ru
www.sottos.ru | vk.com/sottos | fb.com/sottosru
Продажа и установка ПО R-Keeper, обучение, техническая поддержка 24/7
-
17.03.2017, 05:59
#3
Сведущий
В версии 3.33 используется новая электронная подпись для игровых карт.
Перед обновлением необходимо подписать коды карт новыми подписями.
Поскольку этот процесс достаточно продолжительный, перед обновлением необходимо заранее выгрузить игровые коды и прислать их на адрес gk@game-keeepr.com.Это они намекают, что без их участия, самим уже не обновится ?!?
-
17.03.2017, 06:04
#4
Banned
Сообщение от notb
Это они намекают, что без их участия, самим уже не обновится ?!?
Что значит намекают?
Если ты обновишься и не загрузишь новые коды карт с подписью, у тебя все твои карты станут — СОМНИТЕЛЬНЫМИ.
-
17.03.2017, 06:28
#5
Сведущий
Сообщение от Hendehog
Что значит намекают?
Если ты обновишься и не загрузишь новые коды карт с подписью, у тебя все твои карты станут — СОМНИТЕЛЬНЫМИ.т.е. все обновления будут с их участием, соответственно не бесплатные!
-
17.03.2017, 08:41
#6
Разбирающийся
т.е. все обновления будут с их участием, соответственно не бесплатные!
Вот так и рождаются слухи…
Вы бы, для начала, попробовали отписать по указанному мылу и посмотрели бы что вам ответят.
А разговор, в общих чертах, будет такой:
UCS: пришлите нам список номеров карт из Вашей БД. Если не знаете как это сделать — вот вам инструкция.
Вы: Делаете то что нужно. Отправляете список карт.
UCS: Вот эти номера карт были куплены официально. Вот вам для них цифровая подпись. Вот инструкция как подписать карты в новой БД.
(Далее опционально): А вот эти вот эти номера карт были куплены вами ХЗ где (например в Страна Карт) и мы их подписывать не будем.И вот где тут про «не бесплатно???»
Ильин Александр, Компания «Соттос»
г Новосибирск +7 (383) 373-96-98; +7 (909) 533-93-92; nsk@sottos.ru
г Омск +7 (3812) 377-902; +7 (905) 098-92-06; abc@sottos.ru
www.sottos.ru | vk.com/sottos | fb.com/sottosru
Продажа и установка ПО R-Keeper, обучение, техническая поддержка 24/7
-
17.03.2017, 09:43
#7
Banned
Сообщение от notb
т.е. все обновления будут с их участием, соответственно не бесплатные!
Все бесплатно.Правильно сигбаба говорит, вы бы хоть узнали сперва.
Я тоже люблю юсиэс говном пополивать, но только за дело.
Здесь они молодцы.
Единственное — не быстро, хотя нам например быстро сделали.Правда обновились с третьего раза , у нас обновление два раза не вставало из-за того что в коде игровой зоны стоял знак «.».
Кстати говоря, новое обновление распространяется и на gkatm терминальное , и если у вас в терминале новый ФР под ФЗ-54 не спешите обновляться, т.к новые ФР-ы в терминальном ПО сказали еще не поддерживаются.
22ПТК у нас стоят, с новым обновлением пока полет нормальный.
Теперь можно вбивать данные гостя номер или мыло и они даже в чеке печататься будут.
-
17.03.2017, 19:13
#8
Сведущий
вот именно про это я и хотел узнать!)
всем спасиба …
зы
вот только интересно, зачем им что-то слать, веть у них все и так должно быть, не проще ли бы просто запросить новые коды «своих» карт)———- Добавлено в 18:08 ———- Предыдущее сообщение было размещено в 18:03 ———-Единственное — не быстро, хотя нам например быстро сделали.
а вот это вот ваобще сильно напрягает, если учесть, что все это может выполнять скрипт, вообще без человеко участия ….———- Добавлено в 18:13 ———- Предыдущее сообщение было размещено в 18:08 ———-ps
Вот так и рождаются слухи…
я не в кой мере тут не накидывал!
просто все говорили о деньгах за обновление!
и юкс и диллер!
поэтому приведенная фраза в ридми и была расценена о подобном, о чем я и спросил тут!
-
20.03.2017, 05:55
#9
Banned
Сообщение от notb
вот именно про это я и хотел узнать!)
всем спасиба …
зы
вот только интересно, зачем им что-то слать, веть у них все и так должно быть, не проще ли бы просто запросить новые коды «своих» карт)———- Добавлено в 18:08 ———- Предыдущее сообщение было размещено в 18:03 ———-
а вот это вот ваобще сильно напрягает, если учесть, что все это может выполнять скрипт, вообще без человеко участия ….———- Добавлено в 18:13 ———- Предыдущее сообщение было размещено в 18:08 ———-psя не в кой мере тут не накидывал!
просто все говорили о деньгах за обновление!
и юкс и диллер!
поэтому приведенная фраза в ридми и была расценена о подобном, о чем я и спросил тут!Скрипт сам коды потом по почтам рассылать будет?
Ждать долго т.к большая очередь как они сказали.А , где говорили то, про платное обновление?
-
20.03.2017, 08:14
#10
Сведущий
Скрипт сам коды потом по почтам рассылать будет?
не вижу проблем)
(по аналогии например как и с заявками на коды карт)А , где говорили то, про платное обновление?
на сайте у них в прайсах есть обновление от 12т.р.
больше нигде про обновления тишина и доступа свободного к ним я не нашел(
А вот цитата из переписки с ucs, ответ на вопрос про обновление до актуальной версииАктуальная версия на сегодня 3.32. Описание изменений во вложении
Стоимость работ по обновлению 12 000 руб.
Вопрос:
Я использую Microsoft SQL Server 2005 и относительно новичок в SQL в целом.
В базе данных “Информация” существует связь между двумя таблицами “Ресурсы” и “Групповые_ресурсы”. Ресурсы имеют внешний ключ, “id”, в Group_Resources с именем “resource_id”. Существует ограничение внешнего ключа, “fk_gr_res_resources”, между двумя.
Я зарегистрирован как владелец базы данных и имею полные права на чтение/запись/создание/удаление.
Я хочу удалить ограничение внешнего ключа, поэтому я выполнил следующий запрос:
ALTER TABLE [Information].[group_resources] DROP CONSTRAINT fk_gr_res_resources
и получил следующую ошибку:
‘fk_gr_res_resources’ не является ограничением. Не удалось отказаться от ограничения. См. Предыдущие ошибки.
Я смущен, потому что это ограничение, и нет орфографических ошибок. Я собираюсь удалить это ненадлежащим образом? Удаляю ли я ограничение из неправильной таблицы? Любые предложения были бы очень благодарны, и, пожалуйста, не плачьте мне: я все-таки новичок в SQL.
Лучший ответ:
Вы получаете эту ошибку:
Msg 3728, Level 16, State 1, Line 1
'fk_gr_res_resources' is not a constraint.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.
Поскольку ограничение FK не существует!
Вы уверены, что Information
– это правильное имя схемы, а не dbo
?
1. Этот SQL докажет, что FK не существует:
SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources'
2. К сожалению, я ошибся в своем первоначальном ответе, вот правильный синтаксис для SQL Server:
ALTER TABLE <table_name>
DROP CONSTRAINT <foreignkey_name>
3. Пример для вашей базы данных:
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources
END;
4. Попробуйте запустить это:
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'fk_gr_res_resources')
BEGIN
ALTER TABLE Group_Resources
ADD CONSTRAINT fk_gr_res_resources
FOREIGN KEY (resource_id)
REFERENCES Resources(id) /* make sure Resources.id is a PRIMARY KEY */
END;
5. Затем попробуйте это и посмотрите, все ли вы получите эту ошибку:
ALTER TABLE Group_Resources
DROP CONSTRAINT fk_gr_res_resources
Другой синтаксис был для MySQL, извините:
ALTER TABLE <table_name>
DROP FOREIGN KEY <foreignkey_name>
Спасибо за исправление меня OMG Ponies!
Я пытаюсь удалить ограничение на таблицу БД, что-то вроде:
ALTER TABLE MyTable drop CONSTRAINT FK_MyTable_AnotherTable
Но исполнение просто работает и работает. Если я остановлю это, я увижу:
Msg 3727, Level 16, State 0, Line 2
Could not drop constraint. See previous errors.
Веб-поиск выдает различные страницы, но обратите внимание, что ограничение правильно названо, и я пытаюсь удалить его, используя правильное имя
2010-04-07 13:53
4
ответа
Решение
Нашел способ разобраться в этом, хотя я не понимаю, зачем это было нужно.
Смогли снять ограничение, сначала отключив его:
ALTER MyTable NOCHECK CONSTRAINT FK_MyTable_AnotherTable
Затем падение завершается нормально
Все равно приветствую любые комментарии о причине, почему это необходимо
user67617
07 апр ’10 в 14:54
2010-04-07 14:54
2010-04-07 14:54
У меня была такая же проблема на SQL Server 2008 R2, я решил свою проблему с помощью строки ниже, надеюсь, она будет работать и для кого-то еще:)
Alter Table [Table Name]
DROP Column [Column Name]
2014-05-29 08:01
Убедитесь, что вы еще не сняли ограничение, например:
SELECT OBJECT_ID('FK_MyTable_AnotherTable')
Если это вернется null
Ваше ограничение больше не существует. Это объяснило бы сообщение об ошибке.
user50552
07 апр ’10 в 13:56
2010-04-07 13:56
2010-04-07 13:56
У меня была такая же проблема.
Причина заключалась в том, что я допустил ошибку в своем выражении курсора, которое повторяло некоторое ограничение, которое я должен был отбросить. Таким образом, эта ошибка произошла, когда ограничение было фактически удалено в той же транзакции. Затем я сделал откат и проверил, существует ли он: он сделал (конечно, после отката!).
Проверьте, действительно ли он существует в момент сброса.
2015-12-02 07:18
Я создал ограничение, проверяющее положительность столбца, и не могу отказаться от ограничения, а точнее, я даже не понимаю, что ограничение существует. При попытке сбросить ограничение выдается сообщение об ошибке:
ALTER TABLE dbo.Test
DROP CONSTRAINT chk_positive;
Сообщение 3728, уровень 16, состояние 1, строка 1 «chk_positive» не является ограничением. Сообщение 3727, уровень 16, состояние 0, строка 1 Не удалось сбросить ограничение. Посмотреть предыдущие ошибки
Но затем экспериментируя и пытаясь повторно добавить ограничение, предполагает, что оно уже существует.
ALTER TABLE dbo.Test
ADD CONSTRAINT chk_positive CHECK (n_example > 0);
Msg 547, уровень 16, состояние 0, строка 1 Оператор ALTER TABLE конфликтует с ограничением CHECK «chk_positive». Конфликт произошел в базе данных «…», таблице «dbo.Test», столбце «n_example».
Глядя на результаты SELECT * FROM sys.check_constraints
, нет упоминания об ограничении chk_positive
, однако есть другие ограничения, которые я создал.
Есть идеи, почему это может происходить? Любая помощь приветствуется.
3 ответа
Лучший ответ
В SQL Server пространством имен для имен ограничений является вся схема, а не только таблица.
Другими словами, две таблицы не могут иметь одно и то же имя ограничения. Обычно, когда я называю ограничения, я включаю имя таблицы (в вашем случае, chk_test_positive
было бы более вероятным именем).
Вы можете использовать information_schema.table_constraints
, чтобы увидеть список ограничений. Должен быть chk_positive
, который определен в другой таблице.
Мой совет: включите имя таблицы в имя ограничения.
2
Gordon Linoff
21 Ноя 2016 в 01:57
Постарайтесь показать все ограничения. Я предполагаю, что это проблема с заглавными буквами, попробуйте использовать []
SELECT OBJECT_NAME(object_id) AS ConstraintName,
SCHEMA_NAME(schema_id) AS SchemaName,
OBJECT_NAME(parent_object_id) AS TableName,
type_desc AS ConstraintType
FROM sys.objects
WHERE type_desc LIKE ‘%CONSTRAINT’
0
Juan Carlos Oropeza
21 Ноя 2016 в 01:52
Выполните следующий запрос в базе данных, с которой вы работаете. Вы получите уже созданное контрольное ограничение (если оно есть) и соответствующее имя таблицы. Как другие догадались, созданное вами контрольное ограничение могло быть ошибочно создано в какой-то другой таблице. Тогда вы можете действовать соответственно.
select
cc.name
,cc.object_id
,SysObj.name "TableName"
,cc.parent_object_id
FROM sys.check_constraints cc
INNER JOIN sys.objects SysObj
on cc.parent_object_id=SysObj.object_id
WHERE LOWER(cc.name) LIKE '%positive%'
0
Santhoshkumar LM
21 Ноя 2016 в 08:17