小编Kor*_*esh的帖子

使用此用户还原后,将 SQL Server 用户重新绑定到其登录名

在执行 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)

知道这是否可能以及如何做到吗?

sql-server sql-server-2012 users logins

7
推荐指数
1
解决办法
8613
查看次数

编写 SQL Server 生产数据库副本到测试环境的脚本

我们正在我们的项目中引入持续集成,我们决定使用新的生产数据自动刷新我们的测试数据库实例。

我目前正在寻找最佳方法,以避免任何生产中断或减速。

我首先想通过sqlcmd实用程序从命令行使用备份/恢复命令......

但它似乎有问题,因为它仅生成一个.bak文件,尽管该文件仍与 .mdf/.ldf 文件“链接”。因此,在我们的测试环境中恢复它时,找不到这些.mdf/.ldf文件。

然后我继续在恢复命令中指定一个“WITH MOVE”选项,以便通过网络共享指定.mdf/.ldf文件的位置,但我认为生产服务器锁定这些文件并防止从测试服务器读取它们。

所以基本上,你知道一种直接(有效)的方法来将数据库转储到单个文件中,以便在我们的测试环境中轻松加载它吗?
当然不会破坏生产环境。

编辑:

生产和测试 SQL Server 版本都是 12.0.2000。

但我首先测试从生产加载到本地开发 SQL Server Express(也是 v12.0.2000)

sql-server sql-server-2014 copy

6
推荐指数
1
解决办法
2581
查看次数

null 是否比 iif(exists) 更好?

我试图减少我们应用程序数据库上的巨大性能问题。我们使用 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)

顺便说一句,如果您对查询的形式有任何意见或一般性建议,请随时发表评论。

sql-server sql-server-2014

2
推荐指数
1
解决办法
7704
查看次数