Microsoft SQL Server 2016 SP1. Новая возможность CREATE OR ALTER

Microsoft SQL Server 2016 SP1. Новая возможность CREATE OR ALTER

Сегодня я бы хотел поговорить о новшестве, которое пришло к нам из  SQL Server 2016 SP1 и которое понравится все разработчикам и даже некоторым администраторам Баз Данных.

Это новшество направлен она упрощение команды DROP IF EXISTS и название ему CREATE OR ALTER.

Прежде чем перейти к рассмотрению нового механизма, я бы хотел вспомнить как раньше мы выполняли данную операцию:

  •  Удаляем объект, если он существует
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N’dbo.mysproc’) AND OBJECTPROPERTY(id, N’IsProcedure’) = 1

DROP PROCEDURE dbo.mysproc;

— Or

IF OBJECTPROPERTY(OBJECT_ID(‘dbo.usp_mysproc’), N‘IsProcedure’) = 1
DROP PROCEDURE dbo.mysproc;

— Or

DROP PROCEDURE IF EXISTS dbo.mysproc;
  • Создаём новый объект
CREATE PROCEDURE dbo.mysproc @MyParam int AS (...)
  • Восстанавливаем права доступа
GRANT ALTER ON dbo.mysproc TO [that_user];
GO
GRANT EXECUTE ON dbo.mysproc TO [that_user];
GO
GRANT VIEW DEFINITION ON dbo.mysproc TO [that_user];
GO

Или поиск и обновление объекта:

IF OBJECTPROPERTY(OBJECT_ID(‘dbo.usp_mysproc’), N‘IsProcedure’) = 1
ALTER PROCEDURE dbo.mysproc @MyParam int AS (…)

Теперь можно использовать CREATE OR ALTER, это очень просто и легко:

CREATE OR ALTER PROCEDURE dbo.mysproc @MyParam int AS (...)

CREATE OR ALTER может быть использован в:

Но не в:

  • Объектах которым необходимо место хранения (tables, indexes and indexed views)
  • CLR пользовательские функции
  • Deprecated programmability объекты (RULE and DEFAULT)
  • Non-programmability объекты (такие как CREATE ASSEMBLY, CREATE TABLE or CREATE SCHEMA). В этих объектах синтаксис CREATE и ALTER сильно отличается.
Запись опубликована в рубрике Полезно и интересно с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: