2010-02-23 83 views
2

我有一个MS SQL 2000数据库从公共服务器备份并在测试位置进行恢复以进行升级测试。问题是,在公共服务器上具有访问权限的用户在测试服务器上不存在,现在所有表都以该用户名作为前缀(这需要对这些表进行所有查询更改!)来自以前所有者的MS SQL数据库表前缀

Is there任何快速解决这个问题的方法?我已经改变了数据库的所有者,但这没有帮助。

回答

1

好了,找到了答案 - 中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 
+0

您是否阅读过这个问题:这仍然意味着更改所有具有架构参考 – gbn 2010-02-23 08:10:13

+2

“阅读问题”的查询?他问了! – bart 2010-02-23 09:10:24

+0

@bart:很好的电话。 oops – gbn 2010-02-23 13:03:15

1

创建登录和用户,但发现从sysusers中的SID

EXEC sp_addlogin 'TheLogin', 'ThePassword', @sid = ??? 
EXEC sp_adduser 'TheLogin','TheUser' 

注:SQL Server 2000中所以不能使用CREATE LOGIN或CREATE USER