SQL Server’da Sistem Stored Procedure’leri

Stored Procedure’ler veritabanı sistemlerinde genellikle toplu işlemler yapmak için kullanılan dışarıdan parametre alabildiği gibi dışarıya parametre verebilen, sadece yürütülebilir(execute edilir SELECT edilemez) önderleme gerçekleştirmiş nesnelerdir. SQL Server, bazı işlemleri daha kısa yoldan ve hızlı gerçekleştirmemiz için programlama veya yönetim ile ilgili sistem procedur’leri sunar. Bu procedur’lerin bazıları doğrudan T-SQL yazılmış bazıları da harici bir dil ile yazılarak bir kütüphane(.dll) içindeki fonksiyon olarak çalışan olarak çalışırlar bu tür procedure’ler master database’in altında bulunarak extended stored procedure denilir. Bu bölümde bize kolaylıklar sağlayan bu sistem procedur’leri işleyeceğiz.
1) sp_helptext ve sp_depends
SQL Browser gibi uygulamalarda database içerisindeki nesnelerin kod kısmını ve bunların başka nesnelerle olan ilişkilerini görmek isteyebiliriz. Rule, default, stored procedure, function, trigger, computed column, CHECK constraint, view gibi nesnelerin tanımlarını görmek için sp_helptext kullanılabilir.sp_helptext [ @objname = ] 'name' [ , [ @columnname = ] computed_column_name ]

USE AdventureWorks;
GO
EXEC sp_helptext 'Production.uBillOfMaterials';
GO

Bu ifadenin sonucunda SQL 2005 ile birlikte gelen AdventureWorks database içerisindeki ‘Production.uBillOfMaterials’ isimli TRIGGER’in içeriğini gösterilmiş olur. sp_helptext procedure’i sys.sql_modules catalog view’ini sorgulayarak parametre olarak girilmiş nesneye ait SQL Script’i her row en fazla 255 karakter olacak şekilde gösterir.
SQL Server üzerindeki nesnelerin tanımları, sys.syscomments catalog view’inde durur. Doğrudan bu view’i sorgulamak istediğimiz nesneye daha hızlı ulaşmasını sağlar. Örneğin aşağıdaki ifade o database’de bulunan stored procedure’lerin tanımlarını gösterir.

SELECT * FROM sys.syscomments
WHERE text LIKE '%CREATE PROCEDURE%'

Table, view veya stored procedure gibi nesnelerin birbirleriyle ilişkilerini görmek için örneğin bir tablonun hangi function, procedure veya trigger tarafından kullanıldığını görmek için sp_depends kullanılır.sp_depends [ @objname = ]'name' Bu procedure, parametre aldığı nesnenin hem kullandığı hem de kendisinin kullandığı nesneleri listeler. Dolayısıyla database uygulamalarında bir nesneyi silmeden önce bu yordamı kullanarak o nesnenin ilişki durumu kontrol edilebilir. Database üzerindeki nesne ilişkileri bilgileri sys.sql_dependencies catalog view’inde bulunur.
2) sp_addmessage
Kullanıcı tanımlı hata mesajı oluşturmak için kullanılır. sp_addmessage [ @msgnum = ] msg_id , [ @severity = ] severity , [ @msgtext = ] 'msg'msg_id, hata numarasını belirtir. Kullanıcı tanımlı hataların numaraları 50000’den büyük olmalı. severity, 1 ile 25 arasında bir değer alarak hata mesajının kritik durumunu belirtir. Örneğin 1-10 ile arasındaki değer, bu hata mesajının sadece bir uyarı olduğunu bilgilendirme amaçlı kullanıldığını gösterir. 20-25 arasındaki değerler, yazılım veya donanımdan kaynaklanmış ölümcül bir hata olduğunu belirtir. msgtext parametresi de hata mesajını içerir. Aynı şekilde hatanın Windows Event Log’lara yazılıp yazılamaycağı da boolean türünde değer alan with_log parametresiyle belirtilebilir.

EXEC sp_addmessage 50001, 16,
N'Ürün Fiyatı, 1-2000 arasında olmalıdır.'

Veritabanı sunucusunda tanımlı hata mesajları sys.messages catalog view’inde bulunur. Eklenmiş mesajları güncellemek için sp_altermessage yordamı, sistemten kaldırmak için de sp_dropmessage yordamı kullanılır.
3) sp_addtype, sp_datatype_info, sp_droptype
Bulunduğumuda veritabanında kendi veri tipimizi oluşturmak için kullanılır.sp_addtype [ @typename = ] type,
[ @phystype = ] system_data_type
[ , [ @nulltype = ] 'null_type' ] ;

Kullanıcı veri tipleri, sistem veri tiplerine dayalı olarak oluşturulur. Aşağıdaki satır, DogumTarih isminde datetime sistem tipini kullanacak ve NULL kayda izin verebilen bir veri tipi oluşturulmuştur.

EXEC sp_addtype DogumTarihi, datetime, 'NULL';

Veritabanı üzerinde veri tipleri, sys.types catalog view’inde bulunur. Kendi veri tiplerimizi, model veritabanı içerisinde tanımlamamız, bundan sonra yaratılacak veritabanları tarafından da görülmesini sağlar. Bu stored procedure, SQL Server’in gelecek sürümlerinden kaldırılacaktır. Bunun yerine CREATE TYPE ifadesinin kullanılması tavsiye edilir. Sunucu üzerindeki data tipleri hakkında bilgi almak için sp_datatype_info yordamı kullanılabilir. systypes tablosundan herhangi bir data tip bilgisini silmek için sp_droptype kullanılır.
4) sp_addumpdevice, sp_helpdevice, sp_delete_backuphistory, sp_dropdevice
SQL Server’da backup almak için öncelikle “permanent backup file” olarak tanımlanan bir yedekleme dosyasının yaratılması gerekir. Aynı zamanda “backup device” olarak bilinen bu dosyaları, SQL Server Enterprise Manager veya sp_addumpdevice sistem stored procedure aracılığıyla oluşturulur.
sp_addumpdevice [ @devtype = ] 'device_type'
, [ @logicalname = ] 'logical_name'
, [ @physicalname = ] 'physical_name'
[ , { [ @cntrltype = ] controller_type |
[ @devstatus = ] 'device_status' }
]

Buradaki devtype parametresi, disk veya tape olarak backup device türünü belirtir. logicalname parametresi, bu sürücüye ait BACKUP veya RESTORE ifadelerinde kullanılacak mantıksal adı belirtir. physicalname ise bu sürücünün, dosyanın fiziksel adını, fiziksel pathini, konumunu belirtir. Aşağıdaki tabloda, yerel diski, network diskin ve tanımlı tape’in nasıl backup device olarak tanımlandığı gösterilmiştir.

--Disk dump device tanımlama
EXEC sp_addumpdevice 'disk', 'dskdump1', 'c:\yedek\yedek1.bak';

--Network disk backup device tanımlama
EXEC sp_addumpdevice 'disk', 'networkdevice',
    '\\
Sunucu üzerindeki backup device'leri <b>sys.backup_devices</b> catalog view'inde bulunmaktadır.<br /> Herhangi bir device hakkında bilgi almak için detaylarını görmek için <b>sp_helpdevice</b> kullanılır.<br /><b>sp_dropdevice</b> stored procedure, sistem üzerindeki database veya backup device'leri kaldırmak için kullanılır. Bu sürücülerin listesi, <i>master.dbo.sysdevices</i> tablosunda durmaktadır.
Daha önce alınmış backuplara ait tarihsel bilgileri sistemden kaldırmak için <b>sp_delete_backuphistory</b> yordamı kullanılır. 
<font color="#6c0202"><b>5) sp_autostats, sp_createstats, sp_updatestats</b></font><br />Bilindiği gibi SQL Query Optimizer aracı tarafında bir sorgu çalıştırılmadan önce o sorgu için hangi indexleri kullanmanın daha performanslı olacağı araştırılır. Bu araştırma, indexlerle ilgili istatistiksel verilere bakmakla başlar. Indeklerin istatistiksel verileri, o indeksin kullanım bilgi ve yoğunluğunu içerir. Tablo üzerindeki değişiklik yapıldıkça bu bilgilerin daima güncel tutulması gerekir. Sunucu tarafından bu bilgilerin otomatik güncellenip güncellenmeyeceği database ayarlarından yapılabilir. Index bilgilerini manual güncellemek için "UPDATE STATISTICS" komutu kullanılır. <b>sp_autostats</b> yordamı, indekslere ait istatistiksel verilerin ne zaman güncellendiğini "UPDATE STATISTICS" özelliğinin açık olup olmadığını bildirir ve gerekirse değiştirmemize izin verir.<code>sp_autostats [ @tblname = ] 'table_name'<br />
    [ , [ @flagc = ] 'stats_flag' ]<br />
    [ , [ @indname = ] 'index_name' ]</code>
--Product tablosuna ait istatiksel bilgi ayarları
EXEC sp_autostats 'Production.Product';

--Product tablosu üzerindeki tüm indexler için automatic statistics özelliğinin açılması
EXEC sp_autostats 'Production.Product', 'ON';

--Product tablosu üzerindeki AK_Product_Name isimli index için automatic statistics ayarını disable eder
EXEC sp_autostats 'Production.Product', 'OFF', AK_Product_Name;

Database üzerinde bütün tablolardaki uygun kolonlar için istatistiksel veri oluşturmak için sp_createstats yordamı kullanılabilir. Bu kolonlara ait istatistiksel verileri güncellemek için sp_updatestats kullanılır.
Sistem üzerinde bulunan istatik bilgilerine erişmek için tablo adı parametre verilere sp_helpstats yordamı kullanılabilir.
6) sp_attach_db, sp_detach_db ve sp_attach_single_file_db
Dışarda bulunan bir database’i sunucuya attach etmek için kullanılır. sp_attach_db [ @dbname= ] 'dbname'
, [ @filename1= ] 'filename_n' [ ,...16 ]
Aşağıdaki tabloda C:\Alisveris_data.mdf ve C:\Alisveris_log.ldf dosyaları sistem attach edilmiştir. Sistem üzerinde bulunan database’i detach etmek için de sp_detach_db kullanılır.

--C:\'nin altında bulunan dosyaları attach edelim
EXEC sp_attach_db @dbname = N'ALISVERIS',
    @filename1 = N'C:\Alisveris_data.mdf',
    @filename2 = N'C:\Alisveris_log.ldf' ;

--ALISVERIS veritabanını detach edelim
EXEC sp_detach_db 'ALISVERIS'

SQL Server 2005’ten sonraki sürümlerde kaldırılacak bu yordamlar yerine “CREATE DATABASE database_name FOR ATTACH” ifadesinin kullanılması tavsiye edilir.
En çok sorulan sorulardan biri de LOG dosyası bulunmayan ve bozulmuş MDF dosyalarının içeriyi alınmasıdır. Bu şekilde sadece MDF’si bulunan database’leri sisteme yerleştirmek için sp_attach_single_file_db kullanılır.

--ALISVERIS database'ini detach edelim
EXEC sp_detach_db @dbname = 'ALISVERIS';

--Sadece MDF dosyasını içeriye alalım
EXEC sp_attach_single_file_db @dbname = 'ALISVERIS',
    @physname = N'C:\Alisveris_Data.mdf';

Aynı zamanda bu yöntem, log dosyasını küçültmek daha doğrusu yeniden oluşturmak için de kullanılır.
7) sp_configure
En çok kullanılan yordamlardan biri olan sp_configure yordamı, sunucuyla ilgili genel konfigürasyon bilgileri listelememizi, yönetmemizi sağlar. sp_configure [ [ @configname = ] 'option_name'
[ , [ @configvalue = ] 'value' ] ]

sp_configure, parametresiz kullanıldığı zaman sunucu üzerindeki tüm ayarları, değerleriyle birlikte gösterir. Bu ayarlar sys.configurations catalog view’inde tutulmaktadır. Herhangi bir ayar üzerinde değişiklik yapmak için ayarın adını ve yeni değerini parametre olarak geçmemiz yeterlidir. Değiştirilen özelliklerin çalışan sisteme o anda yansıması için “RECONFIGURE” veya “RECONFIGURE WITH OVERRIDE” ifadesi kullanılır.

--Sunucunun language ayarını British yap
EXEC sp_configure 'default language', 23 

--Sunucunun language ayarını turkish yap
EXEC sp_configure 'default language', 1254

--Aynı anda en fazla 5 kullanıcı bağlantısına izin versin
EXEC sp_configure 'user connections', 5

8 ) sp_executesql
Ciddi kolaylık sağlayan bu yordam, dinamik olarak SQL ifadelerini çalıştırmamızı sağlar.sp_executesql [ @stmt = ] stmt
[
{, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' }
{, [ @param1 = ] 'value1' [ ,...n ] }
]
En önemli özelliği çalıştırılacak query için parametre tanımlayabiliyor olmamızdır.

--Basit kullanım
EXECUTE sp_executesql
		  N'SELECT * FROM Musteri
		  WHERE MusteriID = 25'

--Parametreli kullanım
EXECUTE sp_executesql
		  N'SELECT * FROM Musteri
		  WHERE MusteriID = @MId',
		  N'@MId int',
		  @MId = 25;

Bu yordam, yakın zamanda karşılaştığım Linked Server üzerinde sorgu çalıştırırken önemli bir sorunu çözmüştü. Aşağıdaki örnekte DW1 isimli linked server üzerinden uzaktaki sunucudaki Alisveris database’in içindeki Musteri tablosu güncellenmek istenmiştir.

update DW1.Alisveris.dbo.Musteri
set DW1.Alisveris.dbo.Musteri.Adres=''

Bu kadar uzun bir prefix yapısı kullanıldığı zaman SQL Server The number name ‘DW1.Alisveris.dbo.Musteri’ contains more than the maximum number of prefixes. The maximum is 3. hatası vermektedir. Bu hatayı aşmak için nesne prefix’lerinden linked server’i çıkartıp doğrudan sorguyu linked server çalışıyormuş gibi yapmak daha mantıklı. Bunun için aşağıdaki alternatif kullanılabilir.

exec WXX.DW.dbo.sp_executesql N'
	update Musteri set Adres=''''
'

9) sp_help ve diğer yardım procedure’leri
SQL Server’daki herhangi bir database nesnesi hakkında bilgi almak için kullanılır. Database nesnelerine ait bilgiler, sys.sysobjects catalog view’inde bulunur. Nesneler ilgili yardım procedur’leri şunlardır;
sp_helpgroup Database üzerindeki role’lar hakkında bilgi verir.
sp_helpindex Table veya view üzerindeki indexleri döndürür.
sp_helprotect Database üzerindeki user ve statement permissionları, kullanıcıları yetkilerini listeler.
sp_helpserver Sunucu üzerinde tanımlı remote veya replication server’ları listeler. Bunu kullanarak makine üzerinde tanımlı linked serverleri görebiliriz. Sunucuların listesi, master.sys.servers tablosunda bulunur.
sp_helptrigger Tablo adını parametre alarak o tablo üzerindeki trigger’leri listeler.
sp_helpuser Sistem üzerindeki kullanıcıları listeler.
sp_helpconstraint Tablo adını parametre alarak o tablo üzerindeki constraint’ler hakkında bilgi verir. constraint’ler türlerine göre sys.key_constraints, sys.check_constraints ve sys.default_constraints catalog view’lerde bulunur.
sp_helpdb Belirli veya tüm database’ler hakkındaki detayları listeler. Sunucu üzerinde tanımlı database listesi, sys.databases catalog view’de bulunur. Üzerinde çalışılan database’in dosya bilgileri için sys.filegroups ve sys.database_files view’leri sorgulanabilir.
sp_helpdevice Sunucu üzerindeki database veya backup sürücülerini listeler.
sp_helpextendedproc Sunucu üzerindeki extended stored procedure’leri bildirir.
sp_helpfile Üzerinde çalışılan database’le ilişki database dosyalarını bildirir.
sp_helpfilegroup Üzerinde çalışılan database’e ait database file group’ları listeler.
sp_helpindex Parametre olarak aldığı tabloya ait indexleri ve onlara ait detayları gösterir. Database’e ait indexler sys.indexes catalog view’inde durur.
sp_helplanguage En çok kullanılan yordamlardan biri olup sunucu üzerinde tanımlı dilleri ve onlara ait detayları döndürür. Language listesine sys.syslanguages catalog view’inden erişilebilir.
sp_helpsort Özellikle COLLATION sorunlarında yardımcı olacak bir yordam olup sunucunun hangi sort order ve character setini kullandığını bildirir.
sp_helpstats Parametre olarak aldığı tablodaki kolon veya indexlere ait statistic bilgileri listeler.
Bu yordamların çoğu, parametre almadıkları zaman tüm nesneleri listeler, parametre girildiği zaman sadece o nesne hakkında bilgi getirir.
10) sp_serveroption, sp_setnetname
Sunucu üzerinde tanımlı remote server ve linked server ayarlarını düzenlemek için kullanılır. Ayrıca bu sunucuların network’teki adı değiştiği zaman sunucu üzerindeki network adını değiştirmek için sp_setnetname kullanılır.
11) sp_spaceused
Database ve tabloların disk üzerinde ne kadar yer kapladıklarını. Bunların ne kadarını data ve index yapılarını ayırdığını görme imkanı verir. Bu yordam aracılığıyla bir SQL Server tablosunun ne kadar yer kapladığını görebiliriz. Bunun için yordama parametre olarak tablo adını geçmemiz yeterlidir. Herhangi bir parametre kullanılmazsa bağlı bulunan database’in diskteki yer kaplamasıyla ilgili bilgileri listelenir. Ayrıca undocumented bir prosedür olarak sp_MStablespace prosedürü de kullanılabilir. Bununla birlikte kolaylık sağlayan bir prosedür olarak sp_MSindexspace prosedürü de parametre olarak tablo adını alarak o tablodaki indexlerin ne kadar yer kapladıklarını bildirir.
12) sp_who, sp_who2, sp_lock
Sunucu üzerinde bağlantıları ve processlerini görmek için kullanılır. sp_who2, sp_who yordamının özeti ve daha anlışılır halidir. Sunucu üzerindeki çalışan processleri kullanıcı bazında ve SPID bazında görebileceğimiz gibi sadece o anda aktif olarak çalışan işlemleri görmek için active parametresi girilir.

--Bütün processleri listele
EXEC sp_who

--Sadece ahmet isimli kullanıcıya ait processleri listele
EXEC sp_who 'sa';

--Sadece aktif processleri listele
EXEC sp_who 'active';

--Process ID'si 55 olan process hakkındaki detayı ver
EXEC sp_who '55' 

sp_lock yordamı aktif lockları, sunucu üzerindeki kilitlenmeleri bildirir.
13) sp_rename
Veritabanıdaki herhangi bir nesnenin adını değiştirmek için kullanılır.sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]

--SalesTerritory tablosunun adını SalesTerr olarak değiştirir.
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';

--SalesTerritory tablosundaki TerritoryID kolonu TerrID olarak değiştirir.
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';

--ProductVendor üzerindeki IX_ProductVendor_VendorID indeksinin adını IX_VendorID yapar
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';

--Phone türünün adını Telephone olarak değiştirir
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';

14) Tablo veya View ile ilgili Sistem Prosedürleri
Catalog Stored Procedure olarak bilinen bu prosedürler table, view gibi nesneler hakkında detaylı bilgi almamız sağlar. Parametre olarak bilgi almak istediğimiz table veya view adı alır.
sp_columns Parametre aldığı nesnenin kolonlarıyla ilgili detaylı bilgi lister.
sp_column_privileges Tablodaki kolon veya kolonlar üzerindeki hakları bildirir. Birçok parametre alır. Örneğin sadece belli bir kullanıcının belli bir kolon üzerinde hakkı öğrenilebilir.
sp_databases Sunucu üzerinde tanımlı veritabanlarını ve büyüklüklerini listeler.
sp_fkeys Birçok parametre alarak tablolar arasındaki primary-foreign key ilişkisi hakkında bilgi verir. sp_fkeys Forum ifadesi, Forum tablosundaki primary key’i ikincil anahtar olarak kullanan tabloları ve ilişki durumlarını gösterir.
sp_pkeys Tablo üzerindeki primary key(birincil anahtar) bilgilerini gösterir.
sp_server_info Üzerinde çalıştığımız sunucunun adı, sürümü, genel ayarları şeklinde bilgilerini listeler.
sp_special_columns Tablodaki unique(tekil, benzersiz) özelliğie sahip kolonları bildirir.
sp_sproc_columns Parametre olarak stored procedure veya function adı alarak o prosedür veya fonksiyonun parametreleri hakkında bilgi verir.
sp_statistics Parametre olarak aldığı tablo üstündeki index ve onlara ait istatiksel verileri listeler.
sp_stored_procedures Bulunduğumuz ortamdaki stored procedure’leri listeler.
sp_table_privileges Tablo üstündeki tablo erişim izinlerini(INSERT, DELETE, UPDATE, SELECT, REFERENCES gibi) bildirir.
sp_tables Bulunduğumuz ortamdaki table ve view’leri listeler.

USE AdventureWorks;
GO
EXEC sp_tables
   @table_name = '%',
   @table_owner = 'Person',
   @table_qualifier = 'AdventureWorks';

AdventureWorks veritabanında Person şemasında bulunan tüm tabloları listeler.
15) sp_send_dbmail
SQL Server üzerinde mail atmamızı sağlayan yetenekli bir prosedür olup hem bir query’i çalıştırıp sonucunu mail içeriğine gömebilir hem de bir dosyayı attachment olarak gönderebilir. Birçok parametre alan bu prosedüre msdb altında bulunur ve geriye işlemin doğru yapılıp yapılmadığına dair 0 ve 1 döndürür. Detaylarını bulabileceğiniz Books Online’daki şu basit örnek bu işlemin ne kadar kolaylaştırıldığını göstermektedir.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'AdventureWorks Administrator',
    @recipients = 'danw@Adventure-Works.com',
    @body = 'The stored procedure finished successfully.',
    @subject = 'Automated Success Message' ;

16) Güvenlik Prosedürleri(Security Stored Procedures)
SQL Server üzerinde güvenlik işlemlerinin yönetimini düzenlemek için aşağıdaki prosedürler kullanılabilir.
sp_addloginSQL Server authentication’ı kullanarak SQL Server’a bağlanacak yeni bir kullanıcı oluşturmak için kullanılır. SQL Server 2005’ten sonraki sürümlerde kaldırılacak bu prosedür yerine “CREATE LOGIN” ifadesinin kullanılması tavsiye edilir. Birçok parametre alarak, kullanıcıyla birlikte şifresini, default database ve default language ve sabit SPID oluşturma imkanı da vermektedir.

--Şifresi 123 olan rapor isminde user oluşturur.
EXEC sp_addlogin 'rapor', '123';

sp_adduser Üzerinde çalışan database’e user eklemek için kullanılır.
sp_changedbowner Çok kullanılan prosedürlerden biri olup bağlı bulunan database’in sahibini değiştirir.
sp_changeobjectowner İki parametre alarak, herhangi bir nesnenin owner’ini, sahibini değiştirir. Sadece Microsoft SQL Server 2000 nesneleri için çalışan bu yordam, daha sonraki sürümlerde kaldırılarak “ALTER SCHEMA” veya “ALTER AUTHORIZATION” ifadelerinin kullanılması tavsiye edilmiştir.
sp_dropuser SQL Server 2005 öncesi sürümlerde database’deki user’i kaldırmak için kullanılır. 2005 ile birlikte “DROP USER” ifadesi kullanılmalı.
17) Saklı Prosedürler(Undocumented stored procedures) SQL Server’da kullanabileceğimiz ama Microsoft tarafında resmi dokümanlarda paylaşılmayan bazı stored procedure’ler bulunur. Bunlardan T-SQL ile yazılmak yerine farklı bir programlama dili kullanılarak bir dynamic link library(.dll) üzerinde çalışırlar. Extended stored procedure olarak isimlendirilen bu prosedürler, T-SQL ile yapamadığımız birçok işlemi yapmamızı sağlar. Bunlar, master veritabanı altında “xp_” önekiyle kayıt edilmiştir.
sp_MSgetversion Bağlı bulunduğumuz SQL Server sürümü hakkında bilgi verir.

EXEC master..sp_MSgetversion

Buna alternatif olarak SQL Server’daki @@version global değişken kullabılabilir.
xp_dirtree Parametre olarak aldığı klasörün altındaki tüm klasörler içindeki dosyaları listeler. Bir klasörün altındaki sadece klasörleri listelemek için xp_subdirs kullanılır.
xp_enum_oledb_providers Sunucu üzerindeki tanımlı OLE DB provider’ları listeler.
xp_enumcodepages Sunucu üzerinde tanımlı tüm code page, character set’leri listeler. Örneğin Türkçe için aşağıdaki satır gelir. 1254 iso-8859-9 Türkçe (Windows)
xp_enumerrorlogs Sunucu üzerinde oluşturulmuş log dosyalarının listesini döndürür. Bu log dosyalarını okumak için xp_readerrorlog prosedürü kullanılır.
xp_enumgroups Sunucu üzerindeki Windows NT group ve açıklamalarını listeler.
xp_fileexist Parametre olarak aldığı path’te o dosyanın olup olmadığını kontrol eder ve dosya mı yoksa klasör mü olduğunu bildirir.

EXEC master..xp_fileexist 'C:\Deneme.txt'

File Exists File is a Directory Parent Directory Exists
----------- ------------------- -----------------------
0 0 1

xp_fixeddrives Sunucu üzerindeki diskleri ve doluluk bilgilerini gösterir.

SQL Server’da Sistem Stored Procedure’leri” üzerine 7 düşünce

  1. ali haydar eroglu

    üstad sql server 2005’e bir dizin içinde bulunan databaseleri tek tek database ismi yazmadan toplu olarak attach/deattach imkanı varmıdır?

    Cevapla
  2. Ahmet Kaymaz Yazar

    Merhaba,doğrudan bunu yapabilen bir yordam bulunmamaktadır. Eğer sadece T-SQL kullanılarak böyle bir işlem yapılmak isteniyorsa xp_cmdshell ile sözkonusu dizindeki mdf ve ldf dosyalarının adı okunur ve ona göre sp_attach_db ifadesi oluşturulur.

    Cevapla
  3. Hakan

    Çok güzel hazırlanmış, bu konuda Türkçe kaynak bulmak bir hayli zor Ahmet Bey’e teşekkürler.İyi çalışmalar.

    Cevapla
  4. Gökhan ŞAHİN

    Gerçekten anlatım tarzı ve içerik süper hazırlayanlara çok teşekkür ederim gün içerisinde fırsat buldukça bilgileniyoruz.

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.