我有一个将 BlockOnPossibleDataLoss 设置为 false 的 dacpac,但是当我使用 sqlpackage.exe 运行它时部署被阻止,告诉我“列 [a] 被删除,可能会发生数据丢失。”
但是,当我使用完全相同的部署配置文件并从 Visual Studio 2012 发布时,它会通过。
sql-server sql-server-2012 ssdt visual-studio-2012 data-tier-application
当我在 SSDT 数据库项目中包含登录名和用户并尝试使用“数据库偏离注册版本时阻止发布”选项部署 DACPAC 时,即使没有任何更改,它也始终会检测到数据库用户的漂移。
例如,我将项目发布到以前不存在数据库的新服务器上,并且一切正常。正确创建了登录名和用户等。然后我立即将同一个项目发布到同一个服务器上,部署被阻止,因为 db 用户已经漂移。但是我没有对 SQL 实例进行任何更改,甚至没有更新项目。
如果我从 SSDT 项目中删除登录名和用户,那么一切都会按预期进行,即我不会从漂移检测中得到误报,并且我可以更新和部署其他类型的对象而不会出错。
这是登录和用户的脚本:
CREATE LOGIN AppAcct WITH PASSWORD = 'Password1';
GO
CREATE USER AppAcct FOR LOGIN AppAcct
WITH DEFAULT_SCHEMA = dbo;
GO
GRANT CONNECT TO AppAcct;
GO
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的发布配置文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>DacpacDrift</TargetDatabaseName>
<DeployScriptFileName>DacpacDrift.sql</DeployScriptFileName>
<TargetConnectionString>Data Source=.\dev14;Integrated Security=True;Pooling=False</TargetConnectionString>
<BlockWhenDriftDetected>True</BlockWhenDriftDetected>
<RegisterDataTierApplication>True</RegisterDataTierApplication>
<ProfileVersionNumber>1</ProfileVersionNumber>
<ScriptDatabaseOptions>True</ScriptDatabaseOptions>
<BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
<DropObjectsNotInSource>True</DropObjectsNotInSource>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
这就是漂移报告的样子:
<?xml version="1.0" encoding="utf-8"?>
<DriftReport xmlns="http://schemas.microsoft.com/sqlserver/dac/DriftReport/2012/02">
<Additions />
<Removals />
<Modifications>
<Object Name="[AppAcct]" Parent="" Type="SqlUser" />
</Modifications>
</DriftReport> …Run Code Online (Sandbox Code Playgroud) 在数据库项目的项目设置中,我可以从我的数据层应用程序中设置版本号,但是手动设置它有点低效。我想自动增加内部版本号,就像其他 VS 项目一样。如何才能做到这一点 ?同时我想在生成的dacpac文件中看到这个版本号。
当我从 sql server management studio 导出 sql azure 数据库作为数据层应用程序时,我可以选择勾选某些表,但这些表不包含在结果文件中。
我想导出这些表模式,但忽略它们的数据(本质上是导入空表)。对于所有其他表,我也想要数据。
有可能这样做吗?
我有一个建立在 SQL Server 上的数据库
应用程序 1 [旧版应用程序]:
用 C# 编写,并在上述数据库上运行事务。
应用程序 2 [正在开发的新应用程序]:
用 Python 编写,并在上述数据库上运行事务。
注意事项:
这些应用程序访问同一组表并执行类似的操作。
随着时间的推移,我们正在尝试从较旧的应用程序过渡到较新的应用程序。
我发现系统中发生了几个死锁和回滚。
问题
我想了解通过一个应用程序运行的事务是否有可能影响来自独立的其他应用程序的事务。
这些场景是由 DBMS 本身在内部处理还是必须在应用程序级别处理?
与开发人员谈论SqlDataAdaptervs的使用SqlDataReader并阅读此内容:https : //stackoverflow.com/questions/1676753/sqldataadapter-vs-sqldatareader
几乎没有解释从 切换SqlDataAdapter到对 SQL Server 的影响SqlDataReader。
我知道SqlDataReader可能会增加连接对 SQL Server 开放的时间长度,这在有效使用池连接时肯定是一个问题。
除此之外,使用SqlDataReader而不是对 SQL Server 有什么影响SqlDataAdapter?有没有人观察到此更改对 SQL Server 的影响?
sql-server ado.net application-design data-tier-application sql-server-2016