为什么SqlPackage脚本操作和VisualStudio生成脚本会产生不同的结果?
问题描述:
我们与这取决于我是否使用会产生不同的变化脚本发布配置一个Visual Studio数据库项目Visual Studio的生成脚本在命令行选项或SQL包:为什么SqlPackage脚本操作和VisualStudio生成脚本会产生不同的结果?
- Visual Studio中创建了一个10455 KB文件。
- SqlPackage使用以下命令创建一个8,835KB文件:
SqlPackage /a:Script /sf:pub.dacpac /pr:pub.profile.xml
如何遵守命令行VS用来生成其脚本有什么建议?任何想法当这两个进程使用以下发布配置文件时可能会有什么不同?
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>nrc_gateway</TargetDatabaseName>
<DeployScriptFileName>clm_model.publish.sql</DeployScriptFileName>
<BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
<ScriptDatabaseCompatibility>True</ScriptDatabaseCompatibility>
<ProfileVersionNumber>1</ProfileVersionNumber>
<DropDmlTriggersNotInSource>False</DropDmlTriggersNotInSource>
<DropIndexesNotInSource>False</DropIndexesNotInSource>
<TargetConnectionString>Data Source=.;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True</TargetConnectionString>
<AllowIncompatiblePlatform>True</AllowIncompatiblePlatform>
<DropConstraintsNotInSource>False</DropConstraintsNotInSource>
<DropExtendedPropertiesNotInSource>False</DropExtendedPropertiesNotInSource>
<VerifyDeployment>False</VerifyDeployment>
<BlockWhenDriftDetected>False</BlockWhenDriftDetected>
<RegisterDataTierApplication>False</RegisterDataTierApplication>
<IncludeTransactionalScripts>True</IncludeTransactionalScripts>
<ExcludeUsers>True</ExcludeUsers>
<ExcludeDatabaseRoles>False</ExcludeDatabaseRoles>
<DropObjectsNotInSource>False</DropObjectsNotInSource>
<DoNotDropAggregates>False</DoNotDropAggregates>
<DoNotDropApplicationRoles>False</DoNotDropApplicationRoles>
<DoNotDropAssemblies>False</DoNotDropAssemblies>
<DoNotDropAsymmetricKeys>False</DoNotDropAsymmetricKeys>
<DropPermissionsNotInSource>False</DropPermissionsNotInSource>
<GenerateSmartDefaults>True</GenerateSmartDefaults>
<ScriptNewConstraintValidation>True</ScriptNewConstraintValidation>
</PropertyGroup>
</Project>
答
Visual Studio不使用CLI生成脚本,因此没有观察交互的选项。 (它甚至不使用公共的Microsoft.SqlServer.Dac API--它具有内部对提供此功能的程序集的可见访问)。
我可能会从验证SqlPackage.exe的版本和SSDT的版本是否相同开始。 SqlPackage.exe的较早版本可能不会将某些较新的数据库选项(例如,数据库范围的配置设置)编写为脚本。
VS的SqlPackage副本住在这里:
c:\program files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SqlDB\DAC\140
(需要注意的是最后的“140”文件夹,实际上可能是130甚至120,这取决于已安装时,SSDT的具体版本)
最
C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin
(注意,同样,这140可能是130或120,甚至根据DacFramework.msi的特定版本:人们从SQL Server目录跑这里来了SqlPackage.exe这是安装)。
但无论您的SqlPackage.exe位于何处,请检查其文件版本是否与Visual Studio副本相匹配。
这些文件有什么不同? windiff想什么? –