23 Eylül 2008 Salı

sp_rename ile nesne ismi değiştirmek

sp_rename

Genel yazım şekli:

exec sp_rename @object_name, @new_object_name, @object_type

Programlanabilir object lerde kullanımı :

Dikkat!!! : sp_rename syscomments deki text alanındaki nesne ismini değiştirmez. Bu nedenle "stored procedure", "function", "trigger" ve "view" gibi, programlanabilir nesneler için kullanılmamalıdır. Bu tür nesneler de drop edip, yeni ismi ile create ederek yeni obje ismi değiştirilebilir.

Şimdi bir örnekle bunu açıklayalım..

Basit bir stored procedure oluşturalım. Sonuç olarak "This is a test" mesajı döndürsün..

CREATE PROCEDURE sp_myTest
as
SELECT
'This is a test' as result

GO

Aşağıdaki SQL cümlesini kullanarak syscomments de nesnenin script ine bakabiliriz :


SELECT text
FROM syscomments WHERE id = object_id(N'sp_myTest')

Bu sql cümlesini çalıştırdığınızda :

create procedure sp_myTest ..... result isimli kolonda ile başlayan bir ifade göreceksiniz..

Şimdi de sp_rename i kullanarak nesnenin adını değiştirelim..

exec sp_rename 'sp_myTest','sp_myTest_newName'

Bakalım gerçekten değişmiş mi? Bir önceki kodu tekrar çalıştıralım.

SELECT text
FROM syscomments WHERE id = object_id(N'sp_myTest')

Biraz önce bir sonuç dönen sql cümlesi artık bir sonuç döndürmüyor. Çünkü sp_myTest isimli bir nesnemiz artık yok. Yeni isim ile çalıştıralım bakalım ne göreceğiz..

SELECT text
FROM syscomments WHERE id = object_id(N'sp_myTest_newName')


create procedure sp_myTest ..... result isimli kolonda ile başlayan bir ifade göreceksiniz..

Biz objenin adını değiştirip sp_myTest_newName olarak değiştirdik ve syscomments den eski isimle çağırdığımızda bir sonuç gelmediğini de gördük. Ancak text alanı hala sp_myTest olarak kalmış durumda..

Aslında sp_rename i çalıştırdığımız da aşağıdaki hatayı almıştık. Bu hafta yukarıdaki durumu açıklıyor..
Caution: Changing any part of an object name could break scripts and stored procedures.

Books Online daki tavsiye de programlanabilir objectlerde sp_renam kullanmayın. Objeyi drop edin, yeni isimle create edin..


Tablo adının değiştirilmesi :

myTable isimli bir tablo yaratalım.. Yaratılan her bir nesne nin bir id si olur ve sql servarda nesneler id leri ile saklanırlar. object_id system function ını kullanarak objenin id sini öğrenebilir ve yaratılıp yaratılmadığından da böylecek emin olabiliriz. object_id (objectname) null döndürüyorsa o isimde nesne ilgili database de yok demektir.

Bir başka yöntem de SELECT * FROM TabloAdı nı kullanmak olabilir.

CREATE TABLE myTable (ID int,Name varchar(10))

SELECT
object_id(N'myTable')

exec sp_rename
'myTable','myTable_new'

SELECT object_id(N'myTable_new')

SELECT * FROM myTable
Invalid Object Name 'myTable' hatası döndürecektir.

SELECT * FROM myTable_new

cümlesini çalıştırarsınız, ID ve Name isimli 2 kolon dönecektir. İçerisinde hiç bir data olmadığı için bir data gösterilmeyecektir..

Kolon adının değiştirilmesi :

Biraz önce yarattığımız ve adını myTable_new olarak değiştirdiğimiz tablonun name kolonunu name_new olarak değiştirelim..

sp_rename prosedürünün bizim şimdiye kadar kullanmadığımız, default u 'object' olan bir parametresi daha var. Kolonlar, sysobjects de yer almazlar ve birer database objesi değillerdir ve tablo ismi olmadan da birşey ifade etmezler. x tablonun y kolonu diye saklanırlar ve çağırılırlar. Bu yüzden ismini değiştirdiğimiz nesnenin kolon tipinde olduğunu ve hangi tabloya ait olduğunu da söylememiz gerekir.

exec sp_rename 'myTable_new.name','name_new','COLUMN'

myTable_new tablomuza ait olan name isimli kolonu name_new olarak değiştirdik..

SELECT * FROM myTable_new

kodunu çağırarak kolon adının değiştiğini görebiliriz.

Hiç yorum yok: