3

Cultura informatica: cambiare Owner di tabelle e sp in SQLServer 2000 massivamente

L’altro giorno stavo lavorando sul database della piattaforma che gestisco e avevo necessità  di cambiare l’owner definito per tutte le tabelle e stored procedure del mio database sql Server 2000

Ovviamente il dubbio amletico era effettuare la sp_changeobjectowner punto per punto, elemento per elemento, allora mi sono detto:”ma non è possibile effettuare l’operazione massivamente?”

Aguzza l’ingegno e dopo il more la soluzione

La procedura è quella che vedete sotto:

DECLARE @tbl sysname
declare @elemento_da_modificare varchar(256)
declare @oldowner varchar(256)
declare @newowner varchar(256)

select @oldowner = ‘vecchio_owner’
select @newowner = ‘nuovo_owner’

DECLARE tblcur INSENSITIVE CURSOR FOR
SELECT name FROM sysobjects
WHERE xtype = ‘U’ AND uid = user_id(@oldowner)
OPEN tblcur
FETCH tblcur INTO @tbl
WHILE @@FETCH_STATUS = 0
BEGIN
select @elemento_da_modificare = @oldowner + ‘.’ + @tbl
EXEC sp_changeobjectowner @elemento_da_modificare , @newowner
FETCH tblcur INTO @tbl
END
DEALLOCATE tblcur

Update dopo i consigli di Lorenzo
Il tutto parte dal presupposto che sul database SQL esiste una tabella sysobjects in cui sono enunciati tutti gli elementi esistenti nel DB (tabelle e stored procedure) che sono associati alla id dell’owner che devi cambiare.
Cmq funziona provare per credere.

2 Comments Posted

  1. Carino, carino, però io avrei usato la condizione nel WHILE, senza il BREAK ed avrei specificato che si tratta di SQLServer 2000 😉

  2. Piccolo commento
    WHERE xtype = ‘U’ tira fuori tutte le tabelle di cui è owner il vecchio owner

    per modificare anche le SP
    utilizzate:
    WHERE xtype = ‘P’

Leave a Reply

Your email address will not be published.


*


5