Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
А вот - как отличить PRIMARY KEY от UNIQUE KEY в sysconstraints ? (версия 6.5)
|
|||
|---|---|---|---|
|
#18+
Для начала - цитата из BOL... sysconstraints (T-SQL) Contains mappings of constraints to the objects that own the constraints. This table is stored in each database. Column name Data type Description: constid int - Constraint number. id int - ID of the table that owns the constraint. colid - smallint ID of the column on which the constraint is defined, 0 if a table constraint. spare1 - tinyint Reserved. status int - 1 = PRIMARY KEY constraint 2 = UNIQUE KEY constraint 3 = FOREIGN KEY constraint 4 = CHECK constraint 5 = DEFAULT constraint 16 = Column-level constraint 32 = Table-level constraint actions int - Reserved. error int - Reserved. Теперь - 2 запросца и результаты их выполнения: USE pubs select * from sysconstraints where id in (select id from sysobjects where type = 'u' and name = 'authors') select status from sysconstraints group by status constid id colid spare1 status actions error ----------- ----------- ----- ------ ----------- ----------- ----------- 32003145 16003088 0 0 2561 4096 0 48003202 16003088 1 0 133140 4096 0 64003259 16003088 4 0 133141 4096 0 80003316 16003088 8 0 133140 4096 0 (4 row(s) affected) status ----------- 2068 2561 2593 3089 133139 133140 133141 133633 (8 row(s) affected) Ну и где же - правда? Как же их отличать-то "по-правильному"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2001, 14:42 |
|
||
|
А вот - как отличить PRIMARY KEY от UNIQUE KEY в sysconstraints ? (версия 6.5)
|
|||
|---|---|---|---|
|
#18+
Берешь status и побитово его проверяешь. если status & 1 = 1, то это primary key если status & 2 = 2, то это unique если status & 3 = 3, то это foreign key и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2001, 15:13 |
|
||
|
А вот - как отличить PRIMARY KEY от UNIQUE KEY в sysconstraints ? (версия 6.5)
|
|||
|---|---|---|---|
|
#18+
2 GreenSunrise: \nБерешь status и побитово его проверяешь. если status & 1 = 1, то это primary key если status & 2 = 2, то это unique если status & 3 = 3, то это foreign key Кое-какое "зерно" тут, конечно же, есть... НО... Берешь status = 133139 (таких значений в БД pubs - ажно 10 штук) и побитово - получаешь: declare @status int select @status = 133139 select @status, @status & 1 as '1', @status & 2 as '2', @status & 3 as '3' _______________________________________________ status 1 2 3 ----------- ----------- ----------- ----------- 133139 1 2 3 (1 row(s) affected) Вроде как - один и тот же тип constraint'а - одновременно тебе: и "primary key", и "unique key", и "foreign key"... На самом деле, это - обыкновенный "foreign key" (по названиям проверяется, и по полю type на связанной sysobjects). К счастью, для нахождения правильного решения (см. ниже) - достаточно было посмотреть на "внутренности" системной процедурки sp_helpconstraint... К сожалению, вчера в конце р/д - не было на это времени, и пришлось запостить сюда вопросик - надеясь на "авось кто-нить знает?". А решение - вот оно: (жаль - не было "unique key"-ев в базке pubs, пришлось добавлять "для чистоты эсперимента") USE pubs ALTER TABLE dbo.authors ADD CONSTRAINT au_unique_fullname UNIQUE NONCLUSTERED (au_fname, au_lname) select count(c.status) as quantity, o.type, c.status, c.status & 15 as ConstType from sysconstraints c, sysobjects o where c.constid = o.id group by o.type, c.status order by o.type, c.status ______________________________________________ quantity type status ConstType ----------- ---- ----------- ----------- 1 C 2068 4 5 C 133140 4 9 D 133141 5 10 F 133139 3 7 K 2561 1 2 K 2593 1 1 K 3089 1 1 K 3106 2 1 K 133633 1 (9 row(s) affected) Удачи!!! (спасибо за "наводку") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2001, 06:15 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32014623&tid=1825432]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
5ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 331ms |

| 0 / 0 |
