Visual Studio 2013数据库项目删除列

DRo*_*rtE 36 database-project visual-studio-2013

当数据表中存在数据行时,是否有人知道从数据库中删除现有列的最佳方法.

我试过的似乎并不想工作.我在数据库项目中包含了一个预部署脚本

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
Run Code Online (Sandbox Code Playgroud)

然后在首先创建表的脚本中,我从Create Table Script中删除了有问题的列

当执行dacpac时,我得到以下内容

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;    
Run Code Online (Sandbox Code Playgroud)

bea*_*boy 50

我知道这是一个老线程,但当我遇到同样的问题时,我遇到了这个问题.有人可能仍然会受益..

这对我有用:

右键单击VS中的DB项目时,将显示"发布数据库"对话框.您设置目​​标服务器连接并选择正确的数据库.

然后单击"高级..."按钮以打开"高级发布设置".

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

点击OK按钮.然后单击Generate Script按钮以生成发布脚本.

如果要经常生成脚本,可以将这些设置保存到配置文件.


小智 23

您需要修改数据库项目属性

  1. 转到项目属性
  2. 调试选项卡
  3. 删除此选项的检查"如果可能发生数据丢失,则阻止增量部署",如下图所示


Pet*_*ott 0

您只需在项目中执行一次(而不是在预部署脚本中),并且在发布时,您需要使用“允许数据丢失”选项来执行此操作。如果您删除列,我看不出有什么办法可以避免可能的数据丢失。完成此操作后,您可以随时更改该设置。