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]


 



© 2018 | Анна Петросян | pashelp@yandex.ru