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:
Yorum Gönder