Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
Подмогите: необходимо узнать поля primary key для данной таблицы. Узнать SQL-запросом....
Для MSSQL Server 7.
спасибо
24 ноя 03, 18:05    [431167]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
Andrey Sobolev
Member

Откуда: Москва
Сообщений: 416
select A.name, B.name 

from syscolumns A , sysobjects B
where A.id = B.ID and B.xtype = 'U' and A.colstat & 1 = 1

WBR
Andrey V. Sobolev
s_andrey@mail333.com
24 ноя 03, 18:09    [431175]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
он вернул поле id для таблицы dtproperties. странно.
где она указана я не вижу... пардон....
24 ноя 03, 18:16    [431187]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu, INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc WHERE CONSTRAINT_TYPE='PRIMARY KEY' and cu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME AND cu.TABLE_NAME='your_table_name' ORDER BY ORDINAL_POSITION
24 ноя 03, 18:26    [431206]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
Andrey Sobolev
Member

Откуда: Москва
Сообщений: 416
Может так:

select A.name as [Column], B.name as [Table]

from syscolumns A , sysobjects B
where A.id = B.ID and B.xtype = 'U' and A.colstat & 1 = 1
order by A.name


WBR
Andrey V. Sobolev
s_andrey@mail333.com
24 ноя 03, 18:27    [431208]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
to Andrey V. Sobolev
Вот что возвращается. Может потому что у меня версия сервера 7.0.
Column Table             

id dtproperties
(1 row(s) affected)


to Lepsik
Вот это работает. Только вопрос через системные таблицы не лучше? и если лучше, то как?
24 ноя 03, 18:37    [431226]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
--Только вопрос через системные таблицы не лучше?

хуже, потому что решение на системных таблицах зависит от версии сервера, а мое решение будет работать на всех версиях. По крайней мере так мелкософт обещает.
24 ноя 03, 18:41    [431233]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
to Lepsik
Честно говоря производительность важнее... я о совместимости не забочусь...
Мне интерестно узнать будет ли это быстрее работать, если все реализовать через прямые обращения к системным таблицам?
24 ноя 03, 18:49    [431248]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
О совместимости надо заботиться сразу, потом будет поздно. Что касается проиводительности - у вас есть оба запроса, вы сами не можете определить какой быстрее?
24 ноя 03, 18:55    [431263]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
2 Злой шаман.
Вы имеете ввиду первый вариант или то, что я не дал себе труда переделать работающий вариант под вызовы системных таблиц?
24 ноя 03, 19:03    [431273]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
2 Злой шаман
Меня смущает наличие в sysobjects объетов типа "PK".... не понять откуда брать столбцы....
24 ноя 03, 19:07    [431278]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
Glory
Member

Откуда:
Сообщений: 104760
не понять откуда брать столбцы....

Если очень хочется узнать, то нужно открыит BOL и прочитать про системные таблицы - те , которые начинаются с sys
24 ноя 03, 19:10    [431282]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
О! Великий Glory!!! Слушаю и повинуюсь!!! ;)))
24 ноя 03, 19:12    [431287]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
Я имею в виду то, что при использовании недокументированных решений (а таким является прямой запрос к системным таблицам) никто не может гарантировать правильность результата. И если вы что-то не понимаете в структуре системных таблиц, то решайте свои задачи через документированные вещи. К тому же вам уже подарили нужный запрос.
24 ноя 03, 19:15    [431290]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
Хорошо. Всем спасибо.
24 ноя 03, 19:20    [431295]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
Glory
Member

Откуда:
Сообщений: 104760
http://www.microsoft.com/sql/techinfo/productdoc/2000/systables.asp
24 ноя 03, 19:21    [431296]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
Кхм.... Господа.... осознал..... Лучше универсальность...
Но видите ли дело в том, что у меня уже несколько ХП используют именно системные таблицы. А так как вы меня сподвигли на путь универсальности, решил их все переписать через INFORMATION_SCHEMA.
Но не тут-то было: я не нашел как узнать есть ли у таблицы тригер с данным именем! Вобщем скажите могу ли я вообще получить такую информацию через INFORMATION_SCHEMA?

Раньше ХП выглядела так
CREATE PROCEDURE sp_isAuditTr2onTable

@tblName sysname
AS
SELECT case when soTr.id is null then 0 else 1 end as onAudit
FROM sysobjects so
left join sysobjects soTr on so.id=soTr.parent_obj and soTr.name like 'hAudit[_]tr2[_]'+REPLACE(@tblName,' ','_')+'%'
WHERE so.type='U' and so.name = @tblName
25 ноя 03, 13:28    [432161]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
select objectproperty(object_id('YourTriggerName'),'IsTrigger')

25 ноя 03, 14:28    [432319]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
Здесь прямо на вопрос овечают вообще???
25 ноя 03, 14:49    [432359]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
Glory
Member

Откуда:
Сообщений: 104760
Но не тут-то было: я не нашел как узнать есть ли у таблицы тригер с данным именем! Вобщем скажите могу ли я вообще получить такую информацию через INFORMATION_SCHEMA?

Нет. Такие INFORMATION_SCHEMA-ы еще не стандартизированы.

Здесь прямо на вопрос овечают вообще???

Да.
25 ноя 03, 14:52    [432367]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
ф-фух-х-х.... Спасибо.
Значит буду мешать стили.... или все же все сделать одним стилем - через системные таблицы?
25 ноя 03, 15:05    [432408]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
sp_pkeys
25 ноя 03, 15:06    [432412]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
2 Каркасная модель визуализации объекта

Работай как удобнее. Хошь через таблицы, хошь через ХП...

Чо флеймить то?
25 ноя 03, 15:08    [432418]     Ответить | Цитировать Сообщить модератору
 Re: как: Узнать поля primary key  [new]
vvHedgehog
Member

Откуда: Самара
Сообщений: 118
ВО! то что нужно! Спасибо!
25 ноя 03, 15:10    [432428]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить