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

Откуда: Украина/Херсон
Сообщений: 186
В базе есть таблица TAB1. Как мне "правильно" получить информацию о наличии в этой TAB1 уникального столбца - ключевого.
Я вижу появление строки в таблице sysindexes при установке ключевого поля в табл. - Подскажите как правильно сделать запрос на какие системные таблицы надо ссылаться.
21 июн 05, 11:18    [1635715]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104760
Как мне "правильно" получить информацию о наличии в этой TAB1 уникального столбца - ключевого
Расшифруйте ваше понятие "уникальный/ключевой столбец"
21 июн 05, 11:20    [1635724]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
AndreySl
Member

Откуда: Украина/Херсон
Сообщений: 186
ну вот например вот так:)

CREATE TABLE [Table1] (
[my1] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL ,
[my2] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL ,
[my3] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL ,
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
[my1]
) ON [PRIMARY]
) ON [PRIMARY]
GO
21 июн 05, 11:24    [1635743]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
Paul Sacks
Member

Откуда:
Сообщений: 1105
Можно это доработать...
SELECT  distinct o.name AS [Table], 
                 c.name AS [Column], 
                 t.[name] as type, 
                 ISNULL(DT.name, '') AS Key_Field
FROM         dbo.sysobjects o 
INNER JOIN dbo.syscolumns c 
ON c.id = o.id 
LEFT OUTER JOIN
   (SELECT DISTINCT COLUMN_NAME AS name, TABLE_NAME AS TName
    FROM          INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE      OBJECTPROPERTY(object_id(CONSTRAINT_NAME), 'IsPrimaryKey') = 1 AND TABLE_NAME != 'dtproperties') DT 
ON c.name = DT.name AND o.name = DT.TName
inner join dbo.systypes t
on t.xtype = c.xtype and t.name <> 'sysname'
WHERE     (o.xtype = 'U') AND (o.name <> 'dtproperties')

21 июн 05, 11:27    [1635760]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
AndreySl
Member

Откуда: Украина/Херсон
Сообщений: 186
спасибо поробую.
Если я правильно понял, достаточно необходимой информации находится в трех табл?
dbo.sysobjects
dbo.syscolumns
dbo.systypes
21 июн 05, 11:45    [1635863]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
AndreySl
Member

Откуда: Украина/Херсон
Сообщений: 186
А откуда вытащить информацию про unique признак проля?
21 июн 05, 12:29    [1636078]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
Paul Sacks
Member

Откуда:
Сообщений: 1105
AndreySl
А откуда вытащить информацию про unique признак проля?

См. BOL -> sysobjects -> xtype
21 июн 05, 12:59    [1636234]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
select objectproperty(object_id('tbl1'),'TableHasPrimaryKey')
21 июн 05, 14:29    [1636749]     Ответить | Цитировать Сообщить модератору
 Re: помогите вытащить информацию из системн. таблиц  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
AndreySl
В базе есть таблица TAB1. Как мне "правильно" получить информацию о наличии в этой TAB1 уникального столбца - ключевого.
Я вижу появление строки в таблице sysindexes при установке ключевого поля в табл. - Подскажите как правильно сделать запрос на какие системные таблицы надо ссылаться.


select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where table_name = 'TAB1' and constraint_type = 'PRIMARY KEY'
21 июн 05, 19:32    [1638147]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить