vscode visual tasks studio run debug compile code before autocompletar visual-studio-2013 database-project

visual-studio-2013 - visual - vs code run a task



Columna de caĆ­da del proyecto de la base de datos (5)

En mi situación ...

Usando Schema Compare en Visual Studio 2015. Después de que tenga abierta la ventana de Comparación de Esquemas:

  1. Opciones de comparación de esquema (el pequeño icono de rueda dentada en la franja de menú).
  2. Ve a la pestaña General
  3. Desmarque Bloquear en Posible pérdida de datos

Esto permanece sin verificar por la duración de la sesión. No confirmé si está marcada o no cuando sale de la sesión.

¿Alguien sabe la mejor manera de eliminar una columna existente de la base de datos cuando hay filas de datos en la tabla de datos?

Lo que probé no parece querer funcionar. Incluí un script de pre despliegue con el proyecto de base de datos que hace

GO if exists(select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = ''Mercury.dbo.Discounts'' and COLUMN_NAME = ''ColumnToRemove'') BEGIN ALTER TABLE Database.dbo.Table1 Drop Column ColumnToRemove END GO

Luego, en el script que creó la tabla en primer lugar, eliminé la columna en cuestión del Create Table Script

Cuando se ejecutó la ejecución del dacpac, recibí lo siguiente

Initializing deployment (Start) *** The column [dbo].[Table1].[ColumnToRemove] is being dropped, data loss could occur. Initializing deployment (Complete) Analyzing deployment plan (Start) Analyzing deployment plan (Complete) Updating database (Start) An error occurred while the batch was being executed. Updating database (Failed) *** Could not deploy package. Warning SQL72015: The column [dbo].[Table1].[ColumnToRemove] is being dropped, data loss could occur. Error SQL72014: .Net SqlClient Data Provider: Msg 50000, Level 16, State 127, Line 6 Rows were detected. The schema update is terminating because data loss might occur. Error SQL72045: Script execution error. The executed script: IF EXISTS (SELECT TOP 1 1 FROM [dbo].[Table1]) RAISERROR (N''Rows were detected. The schema update is terminating because data loss might occur.'', 16, 127) WITH NOWAIT;


Necesita modificar las propiedades del proyecto de base de datos

  1. Ir a Propiedades del proyecto
  2. Pestaña Debug
  3. eliminar la comprobación de esta opción "Bloquear la implementación incremental si se puede perder la información" como en la imagen siguiente

Sé que es un hilo viejo, pero me encontré con este cuando estaba enfrentando el mismo problema ... Alguien podría aún beneficiarse ...

Esto es lo que funcionó para mí:

Cuando haces clic derecho en el proyecto DB en VS obtienes el cuadro de diálogo ''Publicar base de datos''. Configura la conexión del servidor de destino y elige la base de datos correcta.

Luego haga clic en el botón "Avanzado ..." para abrir la "Configuración de publicación avanzada".

1) Uncheck - ''Block incremental deployment if data loss might occur'' checkbox. 2) Check - ''DROP objects in target but not in project''

Haga clic en el botón OK . A continuación, haga clic en el botón Generar secuencia de comandos para que se genere la secuencia de comandos de publicación.

Puede guardar estas configuraciones en un archivo de perfil si desea generar el script con frecuencia.


Si no puede desmarcar ''Bloquear la implementación incremental si puede ocurrir una pérdida de datos'' por motivos relacionados con el proyecto, puede activar un script de implementación previa y publicación posterior para permitir que la transformación tenga lugar. Esto se vuelve mucho más complejo que el siguiente si tiene dependencias en cualquiera de las columnas en la tabla actualizada.

Ejemplo de script de despliegue previo:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ''YourSchema'' AND TABLE_NAME = ''YourTable'' AND COLUMN_NAME = ''ColumnToBeDropped'') BEGIN CREATE TABLE [Upgrade].[YourTable]( [YourTableId] [int] NOT NULL, [KeepThisColumn] [money] NOT NULL) INSERT INTO Upgrade.YourTable (YourTableId, KeepThisColumn) SELECT YourTableId, KeepThisColumn FROM YourSchema.YourTable TRUNCATE TABLE YourSchema.YourTable END

Luego, el proyecto de la base de datos eliminará la columna que se eliminará de su base de datos.

Necesitará una secuencia de comandos de implementación posterior para transferir los datos nuevamente a la tabla real. Ejemplo de script de implementación posterior:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''Upgrade'' AND TABLE_NAME = ''YourTable'') BEGIN SET IDENTITY_INSERT YourSchema.YourTable ON INSERT INTO YourSchema.YourTable (YourTableId, KeepThisColumn) SELECT YourTableId, KeepThisColumn FROM Upgrade.YourTable SET IDENTITY_INSERT YourSchema.YourTable OFF DROP TABLE Upgrade.YourTable END


Solo debe hacerlo una vez en el proyecto (no en el script de pre-implementación) y cuando publique, deberá hacerlo con la opción "Permitir pérdida de datos". No veo una forma de evitar la pérdida de datos si abandonas una columna. Siempre puede cambiar esa configuración una vez que lo haya hecho.