Нельзя удалить ограничение см предыдущие ошибки

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

Filip Cornelissen's user avatar

asked Apr 7, 2010 at 13:53

DannykPowell's user avatar

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 Ajmal's user avatar

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

DannykPowell's user avatar

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

Andomar's user avatar

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

flam3's user avatar

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

Filip Cornelissen's user avatar

asked Apr 7, 2010 at 13:53

DannykPowell's user avatar

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 Ajmal's user avatar

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

DannykPowell's user avatar

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

Andomar's user avatar

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

flam3's user avatar

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

Filip Cornelissen's user avatar

asked Apr 7, 2010 at 13:53

DannykPowell's user avatar

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 Ajmal's user avatar

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

DannykPowell's user avatar

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

Andomar's user avatar

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

flam3's user avatar

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

locked

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

locked

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!

  1. 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


  2. 13.03.2017, 13:43

    #2

    sibgaba вне форума


    Разбирающийся


    Я в 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


  3. 17.03.2017, 05:59

    #3

    notb вне форума


    Сведущий


    В версии 3.33 используется новая электронная подпись для игровых карт.
    Перед обновлением необходимо подписать коды карт новыми подписями.
    Поскольку этот процесс достаточно продолжительный, перед обновлением необходимо заранее выгрузить игровые коды и прислать их на адрес gk@game-keeepr.com.

    Это они намекают, что без их участия, самим уже не обновится ?!?


  4. 17.03.2017, 06:04

    #4

    Hendehog вне форума


    Banned


    Цитата Сообщение от notb
    Посмотреть сообщение

    Это они намекают, что без их участия, самим уже не обновится ?!?

    Что значит намекают?
    Если ты обновишься и не загрузишь новые коды карт с подписью, у тебя все твои карты станут — СОМНИТЕЛЬНЫМИ.


  5. 17.03.2017, 06:28

    #5

    notb вне форума


    Сведущий


    Цитата Сообщение от Hendehog
    Посмотреть сообщение

    Что значит намекают?
    Если ты обновишься и не загрузишь новые коды карт с подписью, у тебя все твои карты станут — СОМНИТЕЛЬНЫМИ.

    т.е. все обновления будут с их участием, соответственно не бесплатные!


  6. 17.03.2017, 08:41

    #6

    sibgaba вне форума


    Разбирающийся


    т.е. все обновления будут с их участием, соответственно не бесплатные!

    Вот так и рождаются слухи…

    Вы бы, для начала, попробовали отписать по указанному мылу и посмотрели бы что вам ответят.
    А разговор, в общих чертах, будет такой:
    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


  7. 17.03.2017, 09:43

    #7

    Hendehog вне форума


    Banned


    Цитата Сообщение от notb
    Посмотреть сообщение

    т.е. все обновления будут с их участием, соответственно не бесплатные!

    Все бесплатно.Правильно сигбаба говорит, вы бы хоть узнали сперва.
    Я тоже люблю юсиэс говном пополивать, но только за дело.
    Здесь они молодцы.
    Единственное — не быстро, хотя нам например быстро сделали.

    Правда обновились с третьего раза , у нас обновление два раза не вставало из-за того что в коде игровой зоны стоял знак «.».
    Кстати говоря, новое обновление распространяется и на gkatm терминальное , и если у вас в терминале новый ФР под ФЗ-54 не спешите обновляться, т.к новые ФР-ы в терминальном ПО сказали еще не поддерживаются.
    22ПТК у нас стоят, с новым обновлением пока полет нормальный.
    Теперь можно вбивать данные гостя номер или мыло и они даже в чеке печататься будут.


  8. 17.03.2017, 19:13

    #8

    notb вне форума


    Сведущий


    вот именно про это я и хотел узнать!)
    всем спасиба …
    зы
    вот только интересно, зачем им что-то слать, веть у них все и так должно быть, не проще ли бы просто запросить новые коды «своих» карт)———- Добавлено в 18:08 ———- Предыдущее сообщение было размещено в 18:03 ———-

    Единственное — не быстро, хотя нам например быстро сделали.

    а вот это вот ваобще сильно напрягает, если учесть, что все это может выполнять скрипт, вообще без человеко участия ….———- Добавлено в 18:13 ———- Предыдущее сообщение было размещено в 18:08 ———-ps

    Вот так и рождаются слухи…

    я не в кой мере тут не накидывал!
    просто все говорили о деньгах за обновление!
    и юкс и диллер!
    поэтому приведенная фраза в ридми и была расценена о подобном, о чем я и спросил тут!


  9. 20.03.2017, 05:55

    #9

    Hendehog вне форума


    Banned


    Цитата Сообщение от notb
    Посмотреть сообщение

    вот именно про это я и хотел узнать!)
    всем спасиба …
    зы
    вот только интересно, зачем им что-то слать, веть у них все и так должно быть, не проще ли бы просто запросить новые коды «своих» карт)———- Добавлено в 18:08 ———- Предыдущее сообщение было размещено в 18:03 ———-
    а вот это вот ваобще сильно напрягает, если учесть, что все это может выполнять скрипт, вообще без человеко участия ….———- Добавлено в 18:13 ———- Предыдущее сообщение было размещено в 18:08 ———-ps

    я не в кой мере тут не накидывал!
    просто все говорили о деньгах за обновление!
    и юкс и диллер!
    поэтому приведенная фраза в ридми и была расценена о подобном, о чем я и спросил тут!

    Скрипт сам коды потом по почтам рассылать будет?
    Ждать долго т.к большая очередь как они сказали.

    А , где говорили то, про платное обновление?


  10. 20.03.2017, 08:14

    #10

    notb вне форума


    Сведущий


    Скрипт сам коды потом по почтам рассылать будет?

    не вижу проблем)
    (по аналогии например как и с заявками на коды карт)

    А , где говорили то, про платное обновление?

    на сайте у них в прайсах есть обновление от 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

Понравилась статья? Поделить с друзьями:
  • Необычный феномен лексическая ошибка
  • Нельзя совершить одну ошибку дважды
  • Необыкновенный случай лексическая ошибка
  • Нельзя сидеть сложив руки ошибка
  • Необученный мастером ученик допустил ошибку