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

Откуда: Toronto
Сообщений: 523
Вроде так:
select ob.name, ob.id
from sysobjects ob left join sysindexes ix on ob.id=ix.id
	where ob.xtype='U' and ix.id is null
Но не работает: всегда пусто. Точно знаю такие таблицы в базе есть, у которых ни одного индекса. Где я ошибся?
14 дек 04, 23:32    [1181272]     Ответить | Цитировать Сообщить модератору
 Re: найти в БД таблицы без индексов  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
смотри в сторону - список констрейнов
15 дек 04, 00:10    [1181353]     Ответить | Цитировать Сообщить модератору
 Re: найти в БД таблицы без индексов  [new]
А.Панков
Member

Откуда: Toronto
Сообщений: 523
Я не понял, ведь индекс - не констрейн? Вот типы констрейнов из описания sysconstraints:

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.
15 дек 04, 00:24    [1181370]     Ответить | Цитировать Сообщить модератору
 Re: найти в БД таблицы без индексов  [new]
ChA
Member

Откуда: Москва
Сообщений: 11126
А так
select
  ob.name
  , ob.id
from sysobjects ob
left join sysindexes ix on ob.id=ix.id AND ix.indid between 1 and 254
where ob.xtype='U' and ix.id is null
?
15 дек 04, 01:28    [1181413]     Ответить | Цитировать Сообщить модератору
 Re: найти в БД таблицы без индексов  [new]
Glory
Member

Откуда:
Сообщений: 104760
А.Панков
Вроде так:
select ob.name, ob.id
from sysobjects ob left join sysindexes ix on ob.id=ix.id
	where ob.xtype='U' and ix.id is null
Но не работает: всегда пусто. Точно знаю такие таблицы в базе есть, у которых ни одного индекса. Где я ошибся?

У каждой таблицы в sysindexes есть запись(в SQL7 у каждой таблицы хоть с одной записью). Потому что sysindexes хранится адрес первой страницы данных таблицы.

select  ob.name, ob.id
from sysobjects ob
where OBJECTPROPERTY(ob.id, 'IsUserTable') = 1
	and not exists(select * from sysindexes ix where ob.id=ix.id and INDEXPROPERTY ( ix.id, ix.name , 'IndexId' ) is not null)
order by 1
15 дек 04, 10:16    [1181741]     Ответить | Цитировать Сообщить модератору
 Re: найти в БД таблицы без индексов  [new]
А.Панков
Member

Откуда: Toronto
Сообщений: 523
to Glory:
А так работает, ессно, спасибо. Ваши ответы, Glory, обычно содержат больше информации, чем требовал вопрос, за что тоже спасибо - я еще и прочитал про функции OBJECTPROPERTY и INDEXPROPERTY:)
16 дек 04, 01:05    [1184229]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить