Visual Studio 数据库项目重命名列

Nor*_*een 5 database-project visual-studio-2013

我有一个 Visual Studio 数据库项目,关于此类项目的文档似乎很少且粗略。

问题:我想重命名一个列。

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

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

我不知道如何解决这个问题,而且我真的不相信删除这一行就是答案,我已经取消选择“如果可能发生数据丢失,则阻止增量部署”选项,但这似乎没有什么区别。

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

Kei*_*ith 1

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

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

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

创建恢复数据的部署后脚本:

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

由于预部署脚本清空了表,因此列重命名将在部署的常规部分期间发生,而不会收到“阻止增量部署...”警告。

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