Wenn Sie schauen, Besitzer von nur Tabellen ändern Sie die undokumentierte sp_MSforeachtable
wie diese verwenden:
sp_MSforeachtable @command1="sp_changeobjectowner '?', 'new_owner'"
Wenn Sie wirklich alle Objekte müssen dann werden Sie durchlaufen müssen. Eine Möglichkeit (aber nicht die einzige Möglichkeit) wäre ein Cursor wie diese:
DECLARE @currentObject nvarchar(517)
DECLARE @qualifiedObject nvarchar(517)
DECLARE @currentOwner varchar(50)
DECLARE @newOwner varchar(50)
SET @currentOwner = 'ASPNET'
SET @newOwner = 'dbo'
DECLARE alterOwnerCursor CURSOR FOR
SELECT [name] FROM dbo.sysobjects
WHERE
xtype in ('FN','IF','P','TF','U','V', 'TT', 'TF') --Modify list to add and remove object types*
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
Cursor über eine nicht getestete und modifizierte Version von this.
* Hinweis: Die Cursorabfrage bezieht sich auf eine Liste von xtypes
. Bitte überprüfen Sie this für die vollständige Liste.
Ich möchte hinzufügen, wählen in separate Abfrage ausführen: ** Innen sys.schemas S auf S.name = @currentOwner UND sysobjects.schema_id beitreten = S.schema_id ** Falls nicht alle Objekte zum alten Besitzer gehören – TPAKTOPA