sql-server это Как добавить хранимые процедуры в систему контроля версий



хранимые процедуры sql server примеры (5)

Я определенно рекомендую какой-нибудь сторонний инструмент, который интегрируется в SSMS. Помимо упомянутого выше SQL Source Control, вы также можете попробовать версию SQL от Apex.

Важно сделать это действительно простым для разработчиков, если вы хотите, чтобы они его использовали, и лучший способ - использовать инструмент, который интегрируется в SSMS.

Наша команда впервые столкнулась с проблемой отсутствия контроля версий для нашей БД. Как мы можем добавить хранимые процедуры, по крайней мере, для контроля версий? Нынешняя система, которую мы разрабатываем, опирается в основном на SP.


Справочная информация: я разрабатываю систему, которая имеет почти 2000 хранимых процедур.

Критическая вещь, которую я нашел, состоит в том, чтобы рассматривать базу данных как приложение. Вы никогда не откроете EXE с помощью шестнадцатеричного редактора и отредактируете его. То же самое с базой данных; просто потому, что вы можете редактировать хранимые процедуры из базы данных, не означает, что вы должны это делать.

Рассматривайте копию хранимой процедуры в системе контроля версий как текущую версию. Это ваш исходный код. Проверьте его, отредактируйте, протестируйте, установите и верните обратно. В следующий раз, когда он должен быть изменен, выполните ту же процедуру. Как приложение требует процесса сборки и развертывания, так и хранимые процедуры.

Приведенный ниже код является хорошим шаблоном хранимой процедуры для этого процесса. Он обрабатывает оба случая обновления ( ALTER ) или новой установки ( CREATE ).

IF EXISTS(SELECT name
            FROM sysobjects
           WHERE name = 'MyProc' AND type = 'P' AND uid = '1')
   DROP PROCEDURE dbo.MyProc
GO

CREATE PROCEDURE dbo.MyProc
AS

GO

Однако следующий пример лучше в ситуациях, когда вы контролируете доступ к хранимым процедурам. Метод DROP - CREATE теряет информацию GRANT .

IF NOT EXISTS(SELECT name
            FROM sysobjects
           WHERE name = 'MyProc' AND type = 'P' AND uid = '1')
   CREATE PROCEDURE dbo.MyProc
   AS
   PRINT 'No Op'
GO

ALTER PROCEDURE dbo.MyProc
AS

GO

Кроме того, создание процесса для полного построения базы данных из системы контроля версий может помочь в контроле над всем.

Создайте новую базу данных из системы контроля версий. Используйте такой инструмент, как Red Gate SQL Compare, чтобы сравнить две базы данных и выявить различия. Примирить различия.

Более дешевое решение - просто использовать функцию «Сценарий как» в SQL Management Studio и выполнить сравнение текста. Однако этот метод очень чувствителен к точному методу, который SSMS использует для форматирования извлеченного SQL.


Мы просто добавляем оператор CREATE в систему управления версиями в файле .sql, например:

-- p_my_sp.sql
CREATE PROCEDURE p_my_sp
AS
    -- Procedure

Убедитесь, что вы поставили только один SP на файл, и что имя файла точно соответствует имени процедуры (это значительно упрощает поиск процедуры в системе контроля версий)

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

Альтернативой может быть сохранение SP как оператора ALTER вместо этого - это имеет преимущество, заключающееся в упрощении обновления существующей базы данных, но означает, что вам нужно внести некоторые изменения для создания новой пустой базы данных.


Второе решение от @Darryl не сработало, как предложено @Moe. Я изменил шаблон @ Darryl и заставил его работать, и подумал, что было бы неплохо поделиться им со всеми.

IF NOT EXISTS(SELECT name FROM sysobjects
              WHERE name = '<Stored Proc Name>' AND type = 'P' AND uid = '1')   
    EXEC sp_executesql N'CREATE PROCEDURE dbo.<Stored Proc Name>
    AS
    BEGIN
        select ''Not Implemented''
    END
    '
GO

ALTER PROCEDURE dbo.<Stored Proc Name>
AS  
BEGIN
  --Stored Procedure Code 
End

Это действительно хорошо, потому что я не теряю свои права на хранимые процедуры.


Я работаю над этим инструментом http://timabell.github.com/sqlHawk/ именно для этой цели.

Чтобы гарантировать, что никто не забудет проверить свои обновленные файлы .sql, сделайте так, чтобы ваш сервер сборки принудительно настроил промежуточную и живую среды на управление исходным кодом ;-) (в этом вам поможет этот инструмент).





stored-procedures