2011-07-07 1 views
2

Comment puis-je modifier le propriétaire de toutes les tables et procédures stockées dans une base de données SQL Server 2000?DBOwner vers un autre utilisateur SQL Server

Je pense que "sp_changeobjectowner" peut le faire, mais je ne trouve pas de moyen d'y parvenir.

Quelqu'un peut-il m'aider?

EDIT

declare 
@old_owner char(45), 
@new_owner char(45) 

set @old_owner = 'dbo' 
set @new_owner = 'mynewuser' 

select 'exec sp_changeobjectowner ''' + replace(@old_owner,' ','') + '.' + t1.name + '''' + char(44) + char(32) + '' + @new_owner + '' + char(13) 
from sysobjects t1, sysusers t2 
where t1.uid = t2.uid 
and t1.name not like 'sys%' 
and t2.uid <> 7 
and t2.name = @old_owner 
+0

voir les mises à jour ... –

+0

Ok ... maintenant qu'est-ce qui n'a pas fonctionné avec ça? –

+0

Rien à redire, mais j'ai toujours dbo le propriétaire de tout dans ma base de données. –

Répondre

1

La requête que vous avez renvoie un jeu de résultats qui a toutes les commandes que vous aura besoin, mais vous devez toujours exécuter ces commandes.

Copiez les résultats, collez-les dans une fenêtre de requête et essayez de les exécuter.

0

Assurez-vous que le nouveau propriétaire est un utilisateur dans cette base de données.

Vous devrez peut-être préfabriquer le nom d'utilisateur avec le nom de domaine: 'domaine \ nom d'utilisateur'.

use Northwind 
exec sp_MSforeachtable @command1="sp_changeobjectowner '?', 'domain\username'" 

Ou essayez peut-être à l'aide d'un curseur si vous devez modifier uniquement les propriétaires en fonction de certains critères:

DECLARE tables CURSOR 
FOR 
    SELECT [name] 
     FROM sysobjects 
    WHERE xtype = 'u' 

OPEN tables 
DECLARE @TableName NVARCHAR(512) 
FETCH NEXT FROM tables INTO @TableName 

WHILE @@fetch_status = 0 
BEGIN 

    EXEC sp_changeobjectowner @TableName, 'dbo' 

    FETCH NEXT FROM tables INTO @TableName 
END 
CLOSE tables 
DEALLOCATE tables 
Questions connexes