在执行 SQL Server (v12.0.2000) 数据库的还原后,我认为需要将用户重新映射到其登录名(这个问题似乎被称为孤儿用户)。最简单的方法之一是执行:
use [MyDatabase];
alter user MyUser with login = MyUser;
Run Code Online (Sandbox Code Playgroud)
然而,在实现恢复后,该USE
命令失败了,因为我试图用 执行上述命令'MyUser'
,这是孤立的...
因为它是在脚本中,所以我想避免restore
与一个用户和alter user
另一个用户执行 a ,以便第一个用户正确地重新映射到其登录名。
有没有办法用“MyUser”来做到这一点(谁可以毫无问题地连接到主人)?
我通过以下方式完全限定“MyUser”进行了尝试,但没有成功:
use master;
alter user MyDatabase.MyUser with login = MyUser;
Run Code Online (Sandbox Code Playgroud)
知道这是否可能以及如何做到吗?
我们正在我们的项目中引入持续集成,我们决定使用新的生产数据自动刷新我们的测试数据库实例。
我目前正在寻找最佳方法,以避免任何生产中断或减速。
我首先想通过sqlcmd
实用程序从命令行使用备份/恢复命令......
但它似乎有问题,因为它仅生成一个.bak
文件,尽管该文件仍与 .mdf/.ldf 文件“链接”。因此,在我们的测试环境中恢复它时,找不到这些.mdf
/.ldf
文件。
然后我继续在恢复命令中指定一个“WITH MOVE”选项,以便通过网络共享指定.mdf
/.ldf
文件的位置,但我认为生产服务器锁定这些文件并防止从测试服务器读取它们。
所以基本上,你知道一种直接(有效)的方法来将数据库转储到单个文件中,以便在我们的测试环境中轻松加载它吗?
当然不会破坏生产环境。
编辑:
生产和测试 SQL Server 版本都是 12.0.2000。
但我首先测试从生产加载到本地开发 SQL Server Express(也是 v12.0.2000)
我试图减少我们应用程序数据库上的巨大性能问题。我们使用 SQL Server 2014,我们有很多视图。
我想知道重写左连接以在预测中使用存在是否有重大影响?
我的问题是:在构建根据相关匹配项的存在投射不同数据的查询时,是否有任何有关性能的最佳实践?
我的意思是,这些查询中的哪一个可以被认为更好?
1):
select
a.Id,
case when b.Id is not null
then convert(bit,1)
else convert(bit,0)
end IsActive
from A a
left join B b on a.Id = b.Id;
Run Code Online (Sandbox Code Playgroud)
2):
select
a.Id,
iif(exists(select top 1 1 from B where Id = a.Id),
convert(bit,1),
convert(bit,0)
) IsActive
from A a;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您对查询的形式有任何意见或一般性建议,请随时发表评论。