如何使用sqlpackage.exe生成重命名表的脚本?
Posted
技术标签:
【中文标题】如何使用sqlpackage.exe生成重命名表的脚本?【英文标题】:How to generate the script of rename table using sqlpackage.exe? 【发布时间】:2019-11-02 02:36:21 【问题描述】:我有两个数据库 some-db-dev 和 some-db-qa。两个数据库彼此相同。
我已经为这两个数据库创建了一个 DACPAC 文件。 some-db-dev.dacpac 和 some-db-qa.dacpac 分别。(它的表为“A”,列为“Test”。它也有一些虚拟记录。)
在此之后,我执行了以下步骤:
将来自 some-db-dev 数据库的表“A”重命名为“ANamed”。
生成“some-db-dev”的DACPAC并以“some-db-dev”的名称存储
我在命令下着火了:-
sqlpackage /a:Script /sf:"C:\Users\some.user\Desktop\some-db-dev.dacpac" /tf:"C:\Users\some.user\Desktop\some-db-qa.dacpac" /tdn:"some-db-qa" /op:"C:\Users\some.user\Desktop\diffscript.sql"
观察:-
而不是重命名在步骤1中修改的表。它生成了创建表的脚本,如下所示。
`GO
PRINT N'Creating [dbo].[ARenamed]...';
GO
CREATE TABLE [dbo].[ARenamed] (
[Id] NCHAR (10) NULL,
[Name] NCHAR (10) NULL,
[Test] NCHAR (10) NULL
);`
我使用的命令有问题吗??
任何帮助都将不胜感激。
【问题讨论】:
您是否使用 SQL Server 数据库项目重命名重构来执行重命名?如果没有,dacpac 将不知道意图是重命名而不是删除/创建。 @DanGuzman 不,我没有从 SSDT 项目执行重命名操作。我从 sql server 手动重命名了表,然后报告了 DACPAC。表确实在 SQL Server 数据库中重命名。 由于您没有使用重构操作进行更改,SSDT 无法区分重命名和删除/创建。它只能比较源模式和目标模式,不知道你的意图。 【参考方案1】:要重命名 SSDT 中的表,您需要使用重构工具“右键单击表并执行重构重命名”。发生的情况是这会在“RefactorLog.xml”中添加一个条目 - 如果您有其中一个条目,那么在创建部署时会生成一个 sp_rename
,其他的您将在这里看到您看到的内容,然后创建。
见:https://the.agilesql.club/2016/09/refactoring-in-sql-server-data-tools-ssdt/
最后一节“重命名对象”展示了如何做到这一点。
埃德
【讨论】:
【参考方案2】:我认为您需要改用MSBuild
。这是一个如何生成脚本项目与数据库的示例。
MsBuild.exe "PATH_TO_SQL_PROJ_FILE" ^
/p:SqlPublishProfilePath="PATH_TO_PUBLISH_PROFILE" ^
/p:UpdateDatabase=False ^
/t:Build,Publish
【讨论】:
以上是关于如何使用sqlpackage.exe生成重命名表的脚本?的主要内容,如果未能解决你的问题,请参考以下文章
使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败
sqlpackage.exe 忽略 DevOps 发布管道中的特定架构
Azure Devops 无法从计算机上的注册表中找到 Dac Framework (SqlPackage.exe) 的位置
升级数据库时是不是有导致 SqlPackage.exe 执行数据移动(表重新创建)的完整列表?