我有一个 MS SQL 2000 数据库,它是从公共服务器备份并在测试位置恢复以进行升级测试。问题是在公共服务器上具有访问权限的用户在测试服务器上不存在,现在所有表都以该用户名作为前缀(这需要更改对这些表的所有查询!)
有什么快速的方法来解决这个问题吗?我已经更改了数据库所有者,但这没有帮助。
我有一个 MS SQL 2000 数据库,它是从公共服务器备份并在测试位置恢复以进行升级测试。问题是在公共服务器上具有访问权限的用户在测试服务器上不存在,现在所有表都以该用户名作为前缀(这需要更改对这些表的所有查询!)
有什么快速的方法来解决这个问题吗?我已经更改了数据库所有者,但这没有帮助。
创建登录名和用户,但从 sysusers 中找出 SID
EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ???
EXEC sp_adduser 'TheLogin','TheUser'
注意:SQL Server 2000 所以不能使用 CREATE LOGIN 或 CREATE USER
好的,找到答案 - 必须将 OBJECT 所有者更改为 DBO,从而无需在 SQL 脚本/查询中为对象的引用添加前缀 - 在这种情况下,对象是数据库表
这是一个脚本,它将更改数据库中对象的所有者(不是我自己的代码)
DECLARE @currentObject nvarchar(517)
DECLARE @qualifiedObject nvarchar(517)
DECLARE @currentOwner varchar(50)
DECLARE @newOwner varchar(50)
SET @currentOwner = 'old_owner'
SET @newOwner = 'dbo'
DECLARE alterOwnerCursor CURSOR FOR
SELECT [name] FROM dbo.sysobjects
WHERE xtype = 'U' or xtype = 'P'
AND LEFT([name], 2) <> 'dt'
OPEN alterOwnerCursor
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
WHILE @@FETCH_STATUS = 0
BEGIN
SET @qualifiedObject = CAST(@currentOwner as varchar) + '.' + CAST(@currentObject as varchar)
EXEC sp_changeobjectowner @qualifiedObject, @newOwner
FETCH NEXT FROM alterOwnerCursor INTO @currentObject
END
CLOSE alterOwnerCursor
DEALLOCATE alterOwnerCursor