Cumartesi , 15 Aralık 2018

Olusturdugumuz Stored Procedure’lere Tüm Veritabanlarindan Erisebilmek

SQL Serverda Stored Procedure, fonksiyon gibi objeler veritabanı seviyesinde olup sadece oluşturulduğu veritabanında kullanılabilirler. Eğer farklı bir veritabanına bağlı iken başka bir veritabanındaki objeye erişmek istersek ilgili objenin adının başına veritabanı adını da eklememiz gerekiyor. Aksi takdirde “Invalid object name ‘%.*ls’” hatasını alırız. Fakat özellikle SQL Serverın built-in sistem stored procedure ve fonksiyonlarını çalıştırırken veritabanı adı vermeksizin herhangi bir veritabnından ilgili objeye erişebiliyoruz.

İhtiyaç duyulduğu takdirde bir stored procedure bir kere oluşturulup veritabanı adı vermeden herhangi veritabanından çağrılabilir. Bunun için oluşturacağımız stored procedure’u master veritabanında ve “sp_” önekini kullanarak oluşturmamız yeterli olacaktır.

Şimdi bunu basit bir örnek üzerinde görelim. Örneğimizde öncelikle bir stored procedure yazıp ilgili stored procedure içinde şuanki aktif çalışma veritabanımızın adını ekran yazdıralım.

USE master
GO
CREATE PROC sp_getdbname
AS
SELECT DB_NAME(db_id())

Yukarıdaki gibi master veritabanında “sp_” ön eki ile oluşturduğumuz stored procedure bir kaç veritabanında doğrudan çalıştıralım.

 

USE master
GO

EXEC sp_getdbname

USE AdventureWorks2012
GO

EXEC sp_getdbname

USE BtakademiSQLProg
GO

EXEC sp_getdbname

e70b3145-9d57-4025-900b-bbc7f2bb900b[1]

Yukarıdaki sorgularımız çıktısına baktığımızda stored procedure’un sadece master veritabanında oluşturulmasına rağmen farklı veritabanlarından da veritabanı adı belirtilmeden erişilebilmektedir. Bu şekilde bir stored procedure’un tüm var olan veriatablanlarından erişilmesini istiyorsak bunu “sp_” ön eki ile master veritabanında oluşturmamız yeterli olacaktır.

Bu şekilde kullanımda dikkat etmemiz gereken nokta ise veritabanımızı başka bir SQL Server’a restore ettiğimizde master veritabanını da restore etmediğimiz sürece artık bu şekilde oluşturduğumuz stored procedure’lere erişmeyeceğiz.

Hakkında ismailadar

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>