Visual studio 2013 Visual Studio数据库项目重命名列

Visual studio 2013 Visual Studio数据库项目重命名列,visual-studio-2013,database-project,Visual Studio 2013,Database Project,我有一个VisualStudio数据库项目,关于这类项目的文档似乎很少且粗略 问题:我想重命名一列 问题:我要重命名列的表中有数据,因此每次生成脚本时,我都会得到这段代码,这段代码会导致脚本爆炸,因为表中有数据 IF EXISTS (select top 1 1 from [dbo].[res_file_submission]) RAISERROR (N'Rows were detected. The schema update is terminating because data loss

我有一个VisualStudio数据库项目,关于这类项目的文档似乎很少且粗略

问题:我想重命名一列

问题:我要重命名列的表中有数据,因此每次生成脚本时,我都会得到这段代码,这段代码会导致脚本爆炸,因为表中有数据

 IF EXISTS (select top 1 1 from [dbo].[res_file_submission])
RAISERROR (N'Rows were detected. The schema update is terminating because data loss might occur.', 16, 127) WITH NOWAIT
我不知道如何解决这个问题,我真的不相信删除这一行就是答案,我已经取消选择了“如果可能发生数据丢失,则阻止增量部署”选项,但这似乎同样没有什么区别


更新:该列有一个约束,这似乎是原因。

您可以通过部署前和部署后脚本处理此问题

创建预部署脚本以备份表并删除其数据:

if (OBJECT_ID('TempDB..#MyTableBackup') is null)
begin
    -- backup data to a temp table
    SELECT *
    INTO #MyTableBackup
    FROM MyTable

    -- TODO: If you have foreign key constraints that reference MyTable, you'll need to disable them here.

    -- delete the data in your table
    DELETE MyTable
end
创建用于恢复数据的部署后脚本:

-- TODO: Only include the SET IDENTITY_INSERT lines if your table has an identity column
--SET IDENTITY_INSERT MyTable ON

INSERT MyTable
SELECT *
FROM #MyTableBackup

--SET IDENTITY_INSERT MyTable OFF

-- TODO: If you disabled foreign key constraints in the pre-deployment script, enable them here.

DROP TABLE #MyTableBackup
由于预部署脚本会清空表,因此列重命名将在部署的常规部分发生,而不会出现“Block incremental deployment…”警告


请确保在部署成功后从项目中删除这些脚本,以便在下次部署期间不会重新运行它们。

您只需使用命令(重命名查询)重命名生成后部署脚本中的列名即可。它将允许您更改列的名称,并且不会损害该表中的数据。

问题不是我无法重命名列,而是我需要重命名列,然后部署重命名,并且比较脚本一直阻止重命名


解决方案:在数据库项目中重命名我的列,包括对它的引用,然后在我的目标上向预部署脚本添加一个脚本以执行相同的名称更改。然后在我的数据库上运行预部署脚本以更新它,然后运行比较,它现在将不包括列重命名,因为目标和源都具有相同的名称。

您是否突出显示了该列并对其进行了重构重命名(默认为Ctrl+R,R)?这应该只是对列和相关对象进行sp_重命名,而不会给您带来太多麻烦。听起来好像您的脚本正在尝试重新创建表或类似的内容。当您选择生成脚本时,实际的脚本是什么样子的?为了放大这个响应,当您使用refactor时,每个更改的条目都会添加到refactor.log文件中——这会触发sp_重命名,如果没有它,它将删除旧列。