我是SSDT的新手,当我使用Visual Studio中的ssdt UI比较模式时,我正试图找到忽略某些表的方法.有没有办法在SSDT中执行此操作.我认为这可以通过命令行,但想知道我是否可以创建一个.scmp文件,只包含我想要比较的那些表.
在SQL Server数据工具中,您可以使用部署选项"如果可能发生数据丢失则阻止增量部署",我认为这是保持检查的最佳做法.
假设我们有一个表foo,一个现在是冗余的列栏 - 没有依赖项,外键等等,我们已经在数据层和存储过程中删除了对该列的引用,因为它根本就没用过.换句话说,我们对放弃此列不会产生任何不利影响感到满意.
美中不足有几种苍蝇:
在填充列时,除非我们更改"阻止增量部署,否则可能发生数据丢失"选项,否则发布将失败.这个选项是在数据库级别,而不是表级,因此由于客户端的分布式特性,我们必须在所有数据库更新之前关闭"数据丢失"选项数月,并将其重新打开一旦所有客户都更新了(我们的数据库有我们构建的版本号).
您可能认为我们可以使用预部署脚本解决此问题,例如
if exists (select * from information_schema.columns where table_name = 'foo' and column_name = 'bar') BEGIN
alter table foo drop constraint DF_foo_bar
alter table foo drop column bar
END
Run Code Online (Sandbox Code Playgroud)
但是,除非我们关闭"数据丢失可能发生"选项,否则这将失败.
我只是对其他人在这种情况下做了什么感兴趣,因为我想要具有目前看来不可能的粒度.
在Visual Studio 2012中,我们调用了新的项目类型SQL Server Database Project,编译时将创建.dacpac输出文件.
此术语的谷歌将链接它,Data-tier Application但我无法将此名称与DACPA和C链接!
什么dacpac代表什么?
尝试在SSDT中做一些简单的数据比较,但证明有点困难.
在一个数据库中,我有两个我想要比较的表.
这些表具有相同的模式,只是不同的表名.我只是想看看这个工具是否能给我一个很好的方法来比较两者中的数据.
即
tblOutput
tblOutput_210314
Run Code Online (Sandbox Code Playgroud)
但是这个选择两个表在一个数据库中相互比较我看不出如何实现.
您似乎只能选择源数据库和目标数据库中存在的表名.由于我的源数据库和目标数据库是相同的,我基本上将我的表与自己进行比较?
有人知道通过Data Compare实现这一目标的方法吗?
sql-server data-comparison visual-studio-2012 sql-server-data-tools
在PowerShell中,我使用Microsoft.SqlServer.Dac.DacServices和Microsoft.SqlServer.Dac.DacDeployOptions来部署/更新数据库DACPAC.我遇到的问题是找到设置程序包所需的SQLCMD变量的位置.
# Create a DacServices object, which needs a connection string
$dacsvcs = New-Object Microsoft.SqlServer.Dac.DacServices "server=$sqlserver"
# Load dacpac from file
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpac)
# Deploy options
$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
$deployOptions.IncludeCompositeObjects = $true
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用SqlPackage.exe输入这些内容,也许这就是我应该做的.但是在文档或Web浏览器中没有任何地方可以找到DacServices使用SQLCMD变量作为选项的示例 - SQLCMD变量作为我项目的DACPAC的必需参数.
在SQL Server数据工具团队博客中提到,现在可以使用的MSBuild执行两个DacPacs或数据库的模式比较.但是,他们没有提到如何将连接字符串传递给源数据库和目标数据库.如果我设置参数/ p:source ="我的连接字符串"我得到错误:
MSBUILD:错误MSB4177:无效的属性.名称"初始目录"包含无效字符"".
我的PowerShell脚本发送到msbuild的命令行是:
msbuild ".\SchemaCompare.proj" /t:SqlSchemaCompare
/p:source="$sourceConnString" /p:target="$targetConnString"
/p:XmlOutput="$schemaCompareReportPath"
Run Code Online (Sandbox Code Playgroud)
SchemaCompare.proj包含SQL Server数据工具团队博客上建议的内容
我的Visual Studio解决方案中的SQL Server数据工具项目的上一次迭代使用了FileTables/FILESTREAM.此后,代码库被重构为不使用FileTables,因此我删除了引用该功能的所有文件.我在尝试重建项目时遇到此错误:
错误367 SQL71501:数据库选项具有对文件组[FILESTREAM]的未解析引用.使用项目属性的项目设置页面删除引用.
按照错误消息的说明,我进入项目属性>项目设置>数据库设置,并尽可能多地删除对FILESTREAM的引用.但是,我仍然收到此错误消息.我该怎么解决?
提前致谢.
我正在尝试将DACPAC部署到LocalDB 2012,但它只是没有它:
堆栈跟踪如下:
==================================
Could not deploy package. (Microsoft.SqlServer.Dac)
------------------------------
Program Location:
at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, Action`2 reportStatus, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.InternalDeploy(IPackageSource packageSource, Boolean isDacpac, String targetDatabaseName, DacDeployOptions options, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.Deploy(DacPackage package, String targetDatabaseName, Boolean upgradeExisting, DacDeployOptions options, Nullable`1 cancellationToken)
at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.Install()
at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.RunAction()
at Microsoft.SqlServer.Management.Dac.DacWizard.ExecuteDacPage.backgroundWorker1_DoWork(Object sender, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
===================================
Unable to connect to target server. (Microsoft.Data.Tools.Schema.Sql)
------------------------------
Program Location:
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.OnInit(ErrorManager errors, String targetDBName)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment..ctor(SqlDeploymentConstructor constructor)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentConstructor.ConstructServiceImplementation() …Run Code Online (Sandbox Code Playgroud) 我正在使用带有SQL项目的SQL数据工具(SSDT)的Visual Studio 2013.
当我打开项目时,每次它都会检查一些背景模型并显示如下消息"验证您的模型是否与您的源文件同步.您的数据库项目将在1106操作竞争后准备就绪"
据我所知,我没有做任何事情来明确地启动这个验证,所以我认为这是在进行某种后台编译/处理/无论如何.
如果有一个大型数据库,那么它将花费太多时间,我需要等待完成此操作.
有什么办法可以解决这个问题吗?
visual-studio-2013 sql-server-2014 sqlproj sql-server-data-tools
我们正在使用Sql Server数据库项目使用SqlPackage.exe从DacPac创建部署脚本.我们在各种环境中设置了不同的SQL Server文件组.在部署时,我们要排除文件组,因为我们希望在默认文件组中创建对象.在数据库项目设置中,默认文件组不会从PRIMARY更改.
这在尝试部署到默认文件组不是 PRIMARY 的环境时会出现问题,因为包含以下代码...
ALTER DATABASE [$(DatabaseName)]
MODIFY FILEGROUP [PRIMARY] DEFAULT;
Run Code Online (Sandbox Code Playgroud)
有没有办法防止在部署SQL中生成此问题?
sql-server ×4
dacpac ×2
compilation ×1
dac ×1
localdb ×1
msbuild ×1
powershell ×1
sql ×1
sqlcmd ×1
sqlpackage ×1
sqlproj ×1