Monday, December 14, 2009

Проверка на существование таблиц и других объектов баз данных MS SQL

Проверка на существование таблиц, хранимых процедур, видов, функций и даже ключей основана на выборках из таблицы, а точнее вида (View), под названием sysobjects.

Вот пример функции, проверяющей существование таблицы в базе данных:

ALTER FUNCTION [dbo].[is_tbl_exists]
(
@tbl_name varchar(50)
)
RETURNS bit
AS
BEGIN
IF EXISTS(SELECT name FROM sysobjects WHERE name = N'' + @tbl_name AND xtype='U')
RETURN 1

RETURN 0
END

Если в условии выборки по столбцу xtype значение 'U' заменить на 'V' - получим проверку на существование вида

ALTER FUNCTION [dbo].[is_view_exists]
(
@view_name varchar(50)
)
RETURNS bit
AS
BEGIN
IF EXISTS(SELECT name FROM sysobjects WHERE name = N'' + @view_name AND xtype='V')
RETURN 1

RETURN 0
END

Далее, проверка на существование функций:

ALTER FUNCTION [dbo].[is_function_exists]
(
@function_name varchar(50)
)
RETURNS bit
AS
BEGIN
IF EXISTS(SELECT name FROM sysobjects WHERE name = N'' + @function_name AND xtype='FN')
RETURN 1

RETURN 0
END

Проверка на существование процедуры:

ALTER FUNCTION [dbo].[is_procedure_exists]
(
@procedure_name varchar(50)
)
RETURNS bit
AS
BEGIN
IF EXISTS(SELECT name FROM sysobjects WHERE name = N'' + @procedure_name AND xtype='P')
RETURN 1

RETURN 0
END

1 comment:

Lexa said...

Можно и проще:

ALTER FUNCTION [dbo].[is_procedure_exists]
(
@procedure_name varchar(50)
)
RETURNS bit
AS
BEGIN
IF OBJECT_ID(@procedure_name, 'P') > 0
RETURN 1

RETURN 0
END

Существование любого объекта в БД можно проверить функцией OBJECT_ID('имя_объекта'), возвращает идентификатор объекта, если возвращается значение, отличное от NULL, то объект существует.