MS SQL Server 2000’den 2005 e bir veritabanını  taşıdınız. Taşıdığınız veritabanı 5166 diye bir login e aitti. Tüm nesnelerin owner’ı olarak 5166 görünüyordu. Yanlız 2000 versiyonunda bu nesnelerin ismi dbo.Nesne_adi şeklinde iken, 2005’te bir baktınız, 5166.Nesne_adi olarak görünüyor. Önceden gül gibi çalışan blogunuz da şu anda çalışmıyor (bu yeni isimleri ile nesneleri bulamadığı için).

[ALTER](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=ALTER&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) schema\_ismi TRANSFER eski\_Schema\_ismi.NesneIsmi

Komutu da çalışmadı bende çünkü sanırım eski_schema_ismi için 5166 ya iyi gözle bakmadı. (hayret, sen verdin bu ismi ben mi verdim)

Bu 2005 versiyonu için önerilen bir komut. Azmettim obsolete kalacağı için önerilmeyen, ama canavar gibi işimi halleden sistem stored procedure ünü buldum :

[sp\_changeobjectowner](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=sp_changeobjectowner&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)

(gören de tekerleği ben keşfettim sanacak :) )

Neyse işte bu sp işimi halletti. Peki ama 100 tane stored procedure, 40 tane de tablo olan bir db için bu işi nasıl kolayca halledeceğiz?

Şöyle : (ÖNEMLİ NOT: Aşağıdaki kodu MS SQL Server 2005’te, kendi veritabanımda çalıştırdım. Bu çalışmaya girişmeden evvel de data ve log dosyalarımı yedekledim. Aşağıdaki kodun çıktısını kullanırken dikkatli olun. Çok bilinçli bir uyarı gibi olmadı bu belki ama tedbir güzel şey. :))

[declare](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=declare&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) @OldOwner [varchar](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=varchar&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)(100)
[declare](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=declare&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) @NewOwner [varchar](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=varchar&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)(100)
[set](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=set&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) @OldOwner = '5166'
[set](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=set&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) @NewOwner = 'dbo'

[select](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=select&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) 'EXEC sp\_changeobjectowner ''\['
			+ sys.Schemas.\[Name\]
			+ '\].\['
			+ sys.Procedures.\[Name\]
			+ '\]'', '''
			+ @NewOwner
			+ ''''
[FROM](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=FROM&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) sys.Procedures,sys.Schemas
[WHERE](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=WHERE&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) sys.Procedures.schema\_id = sys.Schemas.schema\_id
	[AND](http://search.microsoft.com/default.asp?so=RECCNT&siteid=us/dev&p=1&nq=NEW&qu=AND&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) sys.Schemas.\[Name\] = '5166'

Bu yukardaki SQL sonucunda oluşan satırların hepsini seçin, copy diyip bir query penceresine yapıştırın. Sonra @OldOwner ve @NewOwner değişkenleriniz ihtiyacınıza göre düzeltin (İhtiyacınıza göre lütfen! Başınıza iş açmayın :)). Çalıştırdığınızda stored procedure lerinizin ownerlarının değiştiğini göreceksiniz. Aynı işlemi tablolarınız için yapmak istiyorsanız sys.Procedures yerine sys.Tables yazın.

Böylelikle eski blogumu kurtarmış oldum. Tüm bu zahmetlere sabahın 5’inde eski blogum için katlandım yani. Orayı kullanmaya devam etmeyecek de olsam, yayında kalmasını istedim.

Bir bakın

İşte böyle :)