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

Откуда:
Сообщений: 13
Перед удалением поля в таблице выполяется поиск и удаление CONSTAINT-ов:

1)	SELECT [name]
	FROM sysobjects
	WHERE [id] IN
		(SELECT cdefault
		FROM syscolumns
		WHERE (id = object_id('MyTable')) AND ([name]='Field01'))

2)	SELECT CONSTRAINT_NAME
	FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
	WHERE (Table_Name='MyTable') AND (COLUMN_NAME='Field01')

До недавних пор всё работало, но напоролся на таблицу в которой остаётся индекс по полю, но запросы ничего не выдают и удалить поле не получается.

Клиент сгенерировал скрипт со всеми дочерними элементами и это повергло меня в недоумение, смотрите:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[_MyTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[_MyTable]
GO

CREATE TABLE [dbo].[_MyTable] (
	[ID] [int] IDENTITY (1, 1) NOT NULL ,
	[Field01] [nvarchar] (50) COLLATE Latin1_General_CI_AS NOT NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[_MyTable] WITH NOCHECK ADD 
	CONSTRAINT [PK__Test_usersID] PRIMARY KEY  CLUSTERED 
	(
		[ID]
	)  ON [PRIMARY] 
GO

 CREATE  INDEX [IX__Test_temp3] ON [dbo].[_MyTable]([Field01]) ON [PRIMARY]
GO

Явно видно что есть индекс по полю (хотя зачем он там непонятно). Где ещё можно посмотреть перед удалением поля его дочерние объекты? Какие ещё могут быть дочерние объекты для поля, чтобы впредь их тоже можно было бы удалять перед удалением поля?

Спасибо
6 дек 09, 22:30    [8025918]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить