powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / системный каталог
4 сообщений из 4, страница 1 из 1
системный каталог
    #32053052
pima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
задача такая: определить по системному каталогу, какие поля таблицы являются уникальными. Делаю следующее:

Код: plaintext
1.
2.
3.
select name, xtype, c.*
from sysobjects o join sysconstraints c
	on o.id=c.constid
where c.id=(select ID from sysobjects where name='RevisionReasons')


Вообще в этой таблице 2 уникальных поля. Результат запроса:
Код: plaintext
1.
2.
3.
        name           xtype     constid           id         colid  ..... status ......
IX_RevisionReasons      UQ        13959126        2129442660         0             3106 
IX_RevisionReasons_1    UQ        29959183        2129442660         0             3106 
PK_RevisionReasons      PK        2145442717      2129442660         0             2593 


Грустнее всего, что colid=0. Т. е. констрэйнты существуют, но они на таблицу, а не на поле, соответственно, нельзя вытащить названия уникальных полей. И еще status какой-то левый (в BOL написано, что status=2 - это и есть искомый UniqueKey).
А запрос
Код: plaintext
select * from sysconstraints where status= 2 
вообще ничего не возвращает......
Что за левизна такая творится?
Заранее спасибо
...
Рейтинг: 0 / 0
системный каталог
    #32053060
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы про UNIQUE CONTSRAINT

Код: plaintext
1.
2.
3.
4.
select a.table_name, a.CONSTRAINT_NAME, b.column_name 
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS a
inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE b on b.CONSTRAINT_NAME = a.CONSTRAINT_NAME
where a.CONSTRAINT_TYPE = 'UNIQUE' AND a.TABLE_NAME = 'mytable'
...
Рейтинг: 0 / 0
системный каталог
    #32053062
Volhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же можно и по sysobjects, где xtype='UQ' и parent_obj=id таблички
...
Рейтинг: 0 / 0
системный каталог
    #32053089
pima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Glory
гениально! спасибище!!!!!!!!!

2 Volhv
если б всё было так просто........
вы таким макаром найдёте все constraints, которыми эта таблица владеет. А как определить, НА КАКИЕ ПОЛЯ эти constraints? через sysobjects - никак. Только так, как корифеи советуют......
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / системный каталог
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]