Excluir una tabla específica de una implementación SSDT


11

Tengo una base de datos existente con todo en el esquema dbo. Tengo un proyecto SSDT con objetos que agrego con esquemafoo

Tengo una tabla que se ve así en el proyecto:

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)

Depende de dbo.a. dbo.a tiene muchas columnas que son claves foráneas para otras columnas. Alguien más (que mantiene el esquema predeterminado) podría cambiar dbo.a.

Me gustaría simplemente almacenar dbo.a como:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)

Por lo tanto, se construye internamente, pero no se implementa. ¿Es eso posible?


¿No utiliza Schema Compare para sus implementaciones? Simplemente puede desmarcar esa tabla de la lista cuando se detecten cambios.
Dave

Estoy haciendo una comparación de esquemas en el momento, pero no desde mi computadora portátil al servidor de desarrollo, me gustaría hacer una implementación de publicación real.
Justin Dearing

Respuestas:


11

Puede usar el filtro de implementación AgileSqlClub SqlPackage .

Breves instrucciones reproducidas del artículo original de Ed Elliott :

  1. Descargue el filtro de agilesqlclub.codeplex.com
  2. Pon el DLLen la misma carpeta quesqlpackage.exe
  3. Agregue estos parámetros de línea de comando a su implementación:

    /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

    Esto no desplegará, eliminará ni alterará nada en el BLAHesquema.

Vea el artículo original para más detalles.


Cuando despliegue desde devenv.exe a través de los archivos foo.publish.xml, no genera sqlpackage.exe. ¿Hay alguna manera de que pueda hacer eso?
Justin Dearing

Lo que hago es no usar nunca devenv para implementar cambios, sino construir el proyecto y usar un script para manejar sqlpackage.exe; de ​​esta manera, puede hacer cosas como usar contribuidores de implementación fácilmente y también probar el mismo script que puede usar en sus otros entornos en tu proceso ci!
Ed Elliott

Esto fue una gran ayuda para mí, solo necesitaba implementar un esquema particular. Nota para otros en el futuro, el método ignoreschema puede incluir expresiones regulares IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *) Para ignorar todo menos el esquema
BLAH

3

Solo administrar parte de una base de datos SSDTes difícil. Si no hubiera dependencias, simplemente podría no permitir que suelte objetos y no incluirlos en el proyecto. Como hay dependencias, pero no desea administrarlas, creo que tendrá que engañar al sistema.

Me viene a la mente un método, no tengo la capacidad de probarlos en este momento y solo he usado un método "similar" a este, no este exactamente.

Opción 1:

  1. Cree un nuevo proyecto de base de datos con dbo.aél.

  2. Consulte la tabla con nombres de 3 partes. Para la primera parte del nombre, use una variable SQLCMD. P.ej[$(DatabaseName)].dbo.a.

  3. Nunca despliegue su foobase de datos.

  4. A través de los archivos de publicación o la interfaz cli, $(DatabaseName)iguale el mismo nombre que su base de datos real.


Voy a probar esto
Justin Dearing el

@JustinDearing Use el método de filtro de implementación, se ajusta exactamente a su caso de uso (es decir, mantenga todas las tablas en el control de origen e ignore algunas en la implementación)
Ed Elliott

0

Una forma integrada "limpia" de hacer esto (a partir de 2016) está utilizando un archivo guardado de comparación de esquemas. Usted puede:

  1. Realice su Comparación de esquemas (desde su proyecto de base de datos -> un servidor de destino) y desmarque cualquier objeto que desee excluir para actualizar.
  2. Guarde su comparación de esquemas en un archivo * .scmp
  3. Puede copiar y pegar el archivo .scmp para crear versiones para diferentes entornos si es necesario y simplemente editar en el editor XML para cambiar la fuente (para apuntar a construir el archivo dacpac de salida), conexión, etc. o incluso agregar / modificar elementos manualmente en la sección .
  4. Configure sus parámetros de comando de implementación / publicación de dacpac para usar el archivo .scmp apropiado para la publicación. por ejemplo, SqlPackage.exe / Acción: publicar /SourceFile:c:\project\schema_compare.scmp

Más información aquí: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.