Vouaaaaaala !
J'avoue que c'est un peu siouxe (et aussi un peu laid):
DECLARE @CmdStr varchar(4000), @owner nvarchar(256), @objectid int, @username nvarchar(256)
SET @owner = 'dbo'
DECLARE @CurrentTbl sysname
DECLARE TblCursor SCROLL CURSOR FOR select name,id from sysobjects where xtype='U' and name<>'dtproperties'
OPEN TblCursor
FETCH NEXT FROM TblCursor INTO @CurrentTbl,@objectid
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
print '>>> Chaning owner of '+@CurrentTbl
SELECT @username = name from sysusers where uid = OBJECTPROPERTY(@objectid, 'OwnerId')
SET @CmdStr = 'EXEC sp_changeobjectowner ''['+@username+'].['+@CurrentTbl+']'' , '''+@owner+''''
--EXEC( @CmdStr )
print @CmdStr
FETCH NEXT FROM TblCursor INTO @CurrentTbl,@objectid
END
CLOSE TblCursor
DEALLOCATE TblCursor
Ce script changera l'owner de toutes les tables d'une base.
Tu peux changer l'owner de destination (SET @owner = 'dbo').
On peut aussi changer l'owner d'autres objets (vue, procédures stockées) en modifiant l'ordre SELECT du curseur.
Le serveur va renvoyer le message:
"Caution: Changing any part of an object name could break scripts and stored procedures.
The object owner has been changed."
Ce message peut être ignoré (sauf si tu as des procédures stockée qui utilisent des objets dont l'owner n'est pas dbo, ce qui est généralement chiant de toute façon. J'évite de ce genre de chose: chez moi, tout appartient à dbo.)
Note que ce script est très dépendant des tables système.
Je ne sais pas si il fonctionnera sur d'autres versions de SQL Server que la mienne (SQL Server 7 sp3).
C'est un peu du bricolage quand même :-)
J'espère que ça pourra t'aider.