sql >> Base de Datos >  >> RDS >> Sqlserver

Procedimientos almacenados/esquema DB en control de código fuente

Elegimos crear un script para todo, y eso incluye todos los procedimientos almacenados y los cambios de esquema. No se necesitan herramientas wysiwyg ni sofisticados programas de "sincronización".

Los cambios de esquema son fáciles, todo lo que necesita hacer es crear y mantener un solo archivo para esa versión, incluidos todos los cambios de esquema y datos. Esto se convierte en su secuencia de comandos de conversión de la versión x a x+1. Luego puede ejecutarlo contra una copia de seguridad de producción e integrarla en su 'construcción diaria' para verificar que funciona sin errores. Tenga en cuenta que es importante no cambiar ni eliminar el esquema/sql de carga de datos ya escrito, ya que puede terminar rompiendo cualquier sql escrito más adelante.

-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO

-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO

Para los procedimientos almacenados, elegimos un solo archivo por sproc, y usa el formulario soltar/crear. Todos los procedimientos almacenados se recrean en la implementación. La desventaja es que si se realizó un cambio fuera del control de código fuente, el cambio se pierde. Al mismo tiempo, eso es cierto para cualquier código, pero su DBA'a debe ser consciente de esto. Esto realmente evita que las personas ajenas al equipo jueguen con sus procedimientos almacenados, ya que sus cambios se pierden en una actualización.

Usando Sql Server, la sintaxis se ve así:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [usp_MyProc]
GO

CREATE PROCEDURE [usp_MyProc]
(
    @UserID INT
)
AS

SET NOCOUNT ON

-- stored procedure logic.

SET NOCOUNT OFF

GO  

Lo único que queda por hacer es escribir un programa de utilidad que recopile todos los archivos individuales y cree un nuevo archivo con el conjunto completo de actualizaciones (como un único script). Haga esto agregando primero los cambios de esquema y luego recurriendo a la estructura de directorios e incluyendo todos los archivos de procedimientos almacenados.

Como una ventaja de crear secuencias de comandos de todo, mejorará mucho en la lectura y escritura de SQL. También puede hacer que todo este proceso sea más elaborado, pero este es el formato básico de cómo controlar la fuente de todo sql sin ningún software especial.

Anexo:Rick tiene razón en que perderá los permisos en los procedimientos almacenados con DROP/CREATE, por lo que es posible que deba escribir otro script que vuelva a habilitar permisos específicos. Este script de permiso sería el último en ejecutarse. Nuestra experiencia encontró más problemas con la semántica ALTER versos DROP/CREATE. YMMV