T-SQL | IF EXISTS / NOT EXISTS |
Например, перед созданием объекта, проверить, если он существует / не существует (обращение к системным объектам sysobjects и sysindexes).
Примеры построены на базе AdventureWorks.
Создать TABLE, если ее еще нет:
if not exists (select * from dbo.sysobjects where id = object_id(N'[schema_name].[table_name]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
CREATE TABLE [schema_name].[tabel_name] (filed_name ... ) ON [PRIMARY]
--пример: use AdventureWorks go if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) CREATE TABLE [dbo].[test] (filed1 int NOT NULL) ON [PRIMARY]
Создать INDEX, если его еще нет:
if not exists (SELECT * FROM dbo.sysindexes WHERE (name LIKE 'INDEX_NAME'))
CREATE INDEX [INDEX_NAME] ON [schema_name].[table_name]([field_name]) ON [PRIMARY]
--пример: use AdventureWorks GO if not exists (SELECT * FROM dbo.sysindexes WHERE (name LIKE 'INDEX_NAME')) CREATE INDEX [INDEX_NAME] ON [dbo].[test]([filed1]) ON [PRIMARY]
Удалить TABLE, если она есть:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[schema_name].[table_name]') AND type in (N'U'))
DROP TABLE [schema_name].[table_name]
--пример: use AdventureWorks GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[test]') AND type in (N'U'))
DROP TABLE [dbo].[test]
|