Как проверить, создается ли статистика автоматически в БД SQL Server 2000 с использованием T-SQL? - PullRequest
0 голосов
/ 11 февраля 2010

Некоторое время назад мне пришлось придумать способ очистки всех индексов и созданной пользователем статистики из некоторых таблиц в базе данных SQL Server 2005. После нескольких попыток это сработало, но теперь мне нужно, чтобы оно работало и в базах данных SQL Server 2000. Для SQL Server 2005 я использовал

ВЫБРАТЬ Имя ОТ sys.stats
ГДЕ object_id = object_id (@tableName)
И auto_created = 0

для получения статистики, созданной пользователем. Однако в SQL 2000 нет таблицы sys.stats. Мне удалось извлечь индексы и статистику отличным способом из таблицы sysindexes, но я просто не мог понять, что такое сопоставление sys.stats.auto_created для SQL 2000. Какие-нибудь указатели?

Кстати: T-SQL, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2010

INDEXPROPERTY имеет свойство "IsAutoStatistics". Я также напоминаю, что статистика также хранится в sysindexes, поэтому вы можете получить ID оттуда.

Извините, у меня нет окна SQL 2000 для проверки или подтверждения этого ...

0 голосов
/ 11 февраля 2010

Вы можете присоединиться к sysobjects (на основе столбца id) и проверить значение столбца xtype:

C = ПРОВЕРЬТЕ ограничение
D = ограничение по умолчанию или DEFAULT
F = ограничение ИНОСТРАННОГО КЛЮЧА
L = Log
FN = скалярная функция
IF = встроенная табличная функция
P = хранимая процедура
Ограничение PK = PRIMARY KEY (тип K)
RF = хранимая процедура фильтра репликации
S = системная таблица
TF = табличная функция
TR = триггер
U = таблица пользователей
UQ = УНИКАЛЬНОЕ ограничение (тип K)
V = Вид
X = расширенная хранимая процедура

(из документации таблицы таблиц SQL Server 2000)

Вам нужно что-то вроде:

SELECT SI.name FROM sysobjects AS SO, sysindexes AS SI
WHERE SO.id = SI.id
AND SO.xtype <> 'S'
...