2010-02-23 82 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