这应该是一件简单的事情,我想用覆盖选项上传/导入我的数据库,但我在文档中找不到它
我必须手动删除它并使用Import上传.
在VS 2012中,架构比较工具使用户可以通过选择选项“存储过程”作为应用程序作用域对象来仅比较“存储过程”。
有没有一种方法可以使用SqlPackage.exe仅在选定的架构对象上执行架构比较?
我在 Visual Studio 2017 中有一个数据库项目。我们的数据库项目的管理就像任何其他代码库一样,多个开发人员可以根据需要更新项目。为了减轻部署的痛苦,我在我们的 TFS 2018 (vNext) 构建过程中构建了一个自定义部署任务,它是一个调用 sqlPackage.exe 的 powershell 脚本。SqlPackage 将我们编译的数据库项目(*.dacpac 文件)与我们的目标数据库(在 Dev、QA 等中)进行比较。我配置了自定义步骤,以便它将预期的更改写入磁盘,以便我记录更改的内容,然后 sqlPackage 运行第二遍以将更改应用于预期的目标数据库。
我的 DBA 在我们的 SQL 2016 数据库中启用了查询存储。在我的 sqlPackage 部署期间,初始步骤之一是关闭查询存储,这让我的 DBA 不高兴。他希望能够比较部署前和部署后的更改,但如果查询存储被关闭,我们将丢失历史记录。
我已经尝试了文档中的几个开关 ( https://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx#Publish%20Parameters,%20Properties,%20and%20SQLCMD% 20Variables ) 但我似乎找不到魔法参数。
如何阻止 SqlPackage 关闭查询存储?
我目前的脚本:
sqlPackage.exe /Action:Script /SourceFile: myPath\MyDatabaseName.dacpac" /OutputPath:"myPath\TheseAreMyChangesThatWillBeApplied.sql" /TargetConnectionString:"Integrated Security=true;server=MyServer;database=MyDatabase;" /p:DropObjectsNotInSource=false /p:DropPermissionsNotInSource=false /p:DropRoleMembersNotInSource=false /p:BlockOnPossibleDataLoss=True /Variables:"CrossDatabaseRefs=CrossDatabaseRefs
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?我很惊讶我必须编写一个自定义的 TFS 构建任务来做到这一点。这让我觉得我可能会以艰难的方式做这件事。(但在过去的几年里,这对我来说效果很好)。我喜欢数据库项目,我喜欢它们强制引用并确保我们在删除列时不会破坏其他对象(例如)。
任何见解将不胜感激。
我使用以下命令来生成并使用 SSDT 发布数据库更改:
"C:\Program Files\Microsoft SQL Server\150\DAC\bin\SqlPackage.exe" /Action:Publish /sf:DB.dacpac /Profile:publish.xml
Run Code Online (Sandbox Code Playgroud)
我想提供数据库连接字符串作为参数,而不是使用publish.xml 中的硬编码连接字符串。无论如何我可以覆盖它吗?
我试过:
"C:\Program Files\Microsoft SQL Server\150\DAC\bin\SqlPackage.exe" /Action:Publish /sf:DB.dacpac /Profile:publish.xml /TargetConnectionString:$ConnectionString
Run Code Online (Sandbox Code Playgroud)
其中 $ConnectionString 是来自 Jenkins 的参数。但是,它仍然使用publish.xml 中的ConnectionString。
sql-server continuous-integration jenkins sqlpackage sql-server-data-tools
目标
使用 PowerShell 脚本将 SQL 数据库克隆到不同的远程 SQL Server
什么有效
使用 SSMS 将 BACPAC 文件导入到不同的服务器(远程和本地),不会出现(报告的)警告或错误。
什么不可以
使用 sqlpackage.exe 和 PowerShell dbatools 将 BACPAC 导入远程 SQL Server 会导致以下错误:
Warning SQL72038: The object [XXX] already exists in database with a different definition and will not be altered.
Error SQL72014: .Net SqlClient Data Provider: Msg 15023, Level 16, State 1, Line 1 User, group, or role 'XXX' already exists in the current database.
Error SQL72045: Script execution error. The executed script:
CREATE USER [XXX] …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Microsoft Web部署技术(msbuild和msdeploy命令)将网站部署到服务器.该网站需要部署数据库,两者都在同一台服务器上.我正在寻找部署数据库项目(使用命令行)的最佳解决方案,我想更好地了解有关数据库部署的所有技术.
解决方案的内容(Visual Studio 2013):
注意:我没有自愿使用VS中的持续集成/交付工具或发布方法.我这个项目的第一个目标是了解msbuild/msdeploy如何工作......
我看了一下vsdbcmd命令,它似乎做了我想要的所有步骤......除了我需要将Visual Studio DLLs /文件导入我的远程服务器,我想知道是否有更好的方法......我也看了在msdeploy提供程序dbSqlPackage/dbDacFx,但据我所知,它使用dacpac来应用架构更改.同样,SqlPackage.exe似乎也使用dacpac.
使用dacpac听起来不错,但我对以下问题感到困惑:
是否有其他方法可以从命令行以及您的经验和项目进行部署,部署此类项目的最佳方式是什么?
非常感谢,
我想在命令的输出的每一行前面加上时间戳。例如:
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
会成为:
[2011-12-13 12:20:38] foo
[2011-12-13 12:21:32] bar
[2011-12-13 12:22:20] baz
Run Code Online (Sandbox Code Playgroud)
前缀时间是行的打印时间。如何使用PowerShell做到这一点?
在构建过程中,我们基于 SSDT .sqlproject 生成数据库的 dacpac 文件。此 dacpac 随后使用 sqlpackage 部署到生产环境。尽管使用 /p:DropStatisticsNotInSource=False 开关,sqlpackage 仍将删除 sqlproject 与生产数据库上次同步后添加的所有统计信息。
我们还可以使用发布配置文件和 SSDT 的生成脚本选项来重现此内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>hotel</TargetDatabaseName>
<DeployScriptFileName>Database.sql</DeployScriptFileName>
<TargetConnectionString>connectionstring</TargetConnectionString>
<BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
<DropObjectsNotInSource>True</DropObjectsNotInSource>
<DoNotDropDatabaseRoles>True</DoNotDropDatabaseRoles>
<DoNotDropDatabaseScopedCredentials>True</DoNotDropDatabaseScopedCredentials>
<DoNotDropUsers>True</DoNotDropUsers>
<DoNotDropServerRoles>True</DoNotDropServerRoles>
<DoNotDropSecurityPolicies>True</DoNotDropSecurityPolicies>
<DoNotDropSearchPropertyLists>True</DoNotDropSearchPropertyLists>
<DoNotDropPermissions>True</DoNotDropPermissions>
<DoNotDropPartitionSchemes>True</DoNotDropPartitionSchemes>
<DoNotDropPartitionFunctions>True</DoNotDropPartitionFunctions>
<DoNotDropExternalFileFormats>True</DoNotDropExternalFileFormats>
<DoNotDropExternalTables>True</DoNotDropExternalTables>
<DoNotDropErrorMessages>True</DoNotDropErrorMessages>
<DoNotDropDefaults>False</DoNotDropDefaults>
<ProfileVersionNumber>1</ProfileVersionNumber>
<DropStatisticsNotInSource>False</DropStatisticsNotInSource>
<ScriptRefreshModule>False</ScriptRefreshModule>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我们如何强制 sqlpackage 不删除统计信息?
sqlpackage ×8
dacpac ×2
deployment ×2
powershell ×2
sql-server ×2
bacpac ×1
jenkins ×1
msdeploy ×1
sqlproj ×1
t-sql ×1
tfsbuild ×1
vsdbcmd ×1