我有一个使用在 PC1 上运行的数据库 Microsoft SQL Server 的应用程序。
我在另一台电脑(PC2)上设置了该应用程序:
- 我在PC2上安装了应用程序
- 应用程序在 PC2 上创建数据库 A(应用程序运行)
- 我在两台电脑上备份了数据库 A
- 我将数据库A的备份从PC1恢复到PC2。
- 应用程序无法运行。无法连接。
- 我将 PC2 的数据库 A 备份恢复到 PC2(应用程序正常运行)
我认为唯一能解决这个问题的方法是将数据导出到 SQL 文件,但我不知道该怎么做。
我正在使用 Microsoft SQL Express 2005。
答案1
我怀疑你的问题是孤立用户基本上,您的用户和登录名可能命名相同,但是在不同的实例上它们具有不同的 sid。
下面是一个显示问题的脚本(摘自链接):
USE MASTER
GO
SELECT name as SQLServerLogIn,SID as SQLServerSID FROM sys.syslogins
WHERE [name] = 'YourAppUser'
GO
USE YourAppDB
GO
SELECT name DataBaseID,SID as DatabaseSID FROM sysusers
WHERE [name] = 'YourAppUser'
GO
或者,您可以直接修复它。有一个内置程序可以解决此问题。将数据库从第一台 PC 恢复到第二台 PC 并运行:
USE YourAppDB
GO
exec sp_change_users_login @action='update_one',@usernamepatter='YourAppUser',@loginname='YourAppUser'
GO
我曾经必须在大量数据库上运行它,所以我有:
execute sp_MSforeachdb 'USE [?]; exec sp_change_users_login @action=''update_one'',@usernamepattern=''YourAppUser'',@loginname=''YourAppUser'''
(这使用未记录的 sp_MSforeachdb 过程来运行该命令每一个数据库。)