Можно ли переименовать проверочное ограничение для типа таблицы в SQL Server 2014?

Через SQL Server 2014, CREATE TYPE ... TABLE не поддерживает именованные контрольные ограничения.

Это в свою очередь приводит к проверке ограничений с загадочными именами (например, CK__TT_Income__Incom__72BBEAA9).

Такие ограничения сохраняются в sys.check_constraints, но я не смог переименовать один из них, используя sp_rename,

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

Сообщение 15248, уровень 11, состояние 1, процедура sp_rename, строка 424
Либо параметр @objname является неоднозначным, либо заявленный @objtype (объект) неверен.

Вот мой тип таблицы:

CREATE TYPE IncomeCodeTable AS
   TABLE(IncomeCode char(1)
        CHECK (IncomeCode IN ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
                              'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
                              'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
                              'Y', 'Z', '1', '2', '3', '4'))
                              )*

"Самая правильная" попытка - первая в следующем списке:

EXECUTE sp_rename N'sys.CK__TT_Income__Incom__72BBEAA9', 
                  N'CK_TT_IncomeCodeTable', 'object'

Далее попробуйте внутреннюю форму таблицы типа

EXECUTE sp_rename   
          N'TT_IncomeCodeTable_71C7C670.CK__TT_Income__Incom__72BBEAA9', 
          N'CK_TT_IncomeCodeTable', 'object'

Наконец, попробуйте "пользовательскую" форму таблицы типа

EXECUTE sp_rename N'IncomeCodeTable.CK__TT_Income__Incom__72BBEAA9', 
                  N'CK_TT_IncomeCodeTable', 'object'

В итоге, есть ли способ переименовать проверочное ограничение, связанное с определяемым пользователем типом таблицы?

2 ответа

Сначала найдите ограничение и удалите его, затем заново создайте его, используя Alter Table, которая позволяет вам установить имя. К сожалению, для этого необходимо ввести определение ограничения. Для этого может быть полезным использование инструмента, который может генерировать DDL из существующей таблицы. Например: MSSMS

Это умозрительно...

Документация не очень ясна по этому поводу, но я думаю, что вы просто не можете переименовать ограничение, так как в документации говорится:

Пользовательское определение типа таблицы не может быть изменено после его создания.

и переименование ограничения изменит тип. По крайней мере, так я это интерпретирую. Я мог бы неправильно понять это, но я не нашел другого разумного объяснения.

Другие вопросы по тегам