Aracılığıyla paylaş


Saklı Prosedürler (Veritabanı Motoru)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft Fabric SQL veritabanı

SQL Server'daki saklı prosedür, bir veya daha fazla Transact-SQL deyiminden oluşan bir grup veya Microsoft .NET Framework ortak dil çalışma zamanı (CLR) yöntemine başvurudur. Yordamlar, diğer programlama dillerindeki yapılara benzer, çünkü:

  • Giriş parametrelerini kabul edin ve çağıran programa çıkış parametreleri biçiminde birden çok değer döndürebilirsiniz.

  • Veritabanında işlem gerçekleştiren programlama deyimleri içerir. Bu deyimler diğer yordamları çağırmayı içerir.

  • Başarılı veya başarısız olduğunu (ve başarısızlığın nedenini) belirtmek için bir çağrı programına durum değeri döndür.

Depolanan prosedürleri kullanmanın avantajları

Aşağıdaki listede prosedür kullanmanın bazı avantajları açıklanmaktadır.

Azaltılmış sunucu/istemci ağ trafiği

Bir yordamdaki komutlar tek bir kod toplu işlemi olarak yürütülür. Bu yaklaşım, ağ üzerinden yalnızca yordamı yürütme çağrısı gönderildiğinden sunucu ve istemci arasındaki ağ trafiğini önemli ölçüde azaltabilir. Bir prosedür tarafından sağlanan kod kapsüllemesi olmadan, her bir kod satırının ağdan geçmesi gerekecekti.

Daha güçlü güvenlik

Kullanıcıların ve programların bu temel nesneler üzerinde doğrudan izinleri olmasa bile, birden çok kullanıcı ve istemci programı bir yordam aracılığıyla temel alınan veritabanı nesneleri üzerinde işlemler gerçekleştirebilir. Yordam, hangi işlemlerin ve etkinliklerin gerçekleştirildiğini denetler ve temel alınan veritabanı nesnelerini korur. Bu yaklaşım, tek tek nesne düzeyinde izin verme gereksinimini ortadan kaldırır ve güvenlik katmanlarını basitleştirir.

EXECUTE AS yan tümcesi, başka bir kullanıcının kimliğine bürünme özelliğini etkinleştirmek veya kullanıcıların veya uygulamaların temel alınan nesneler ve komutlar üzerinde doğrudan izinlere gerek kalmadan belirli veritabanı etkinliklerini gerçekleştirmesini sağlamak için deyiminde belirtilebilirCREATE PROCEDURE. Örneğin, TRUNCATE TABLE gibi bazı eylemlerin tanınabilir izinleri yoktur. Belirtilen tabloda TRUNCATE TABLE izinlerine sahip olmadan ALTER işlemi gerçekleştiremezsiniz. Bir tablo üzerinde kullanıcıya ALTER izinleri vermek ideal olmayabilir, çünkü kullanıcının bir tabloyu kısaltma özelliğinin ötesinde izinleri daha ileri seviyede etkin bir şekilde vardır. Modüle TRUNCATE TABLE ifadesini ekleyerek ve bu modülün tabloyu değiştirme iznine sahip bir kullanıcı olarak çalışmasını belirterek, modül üzerinde EXECUTE izni verdiğiniz kullanıcıya tabloyu boşaltma iznini genişletebilirsiniz.

Bir uygulama ağ üzerinden bir yordam çağırdığında, yalnızca yordamı yürütme çağrısı görünür. Bu nedenle, kötü niyetli kullanıcılar tablo ve veritabanı nesne adlarını göremez, kendi Transact-SQL deyimlerini ekleyemez veya kritik verileri aramaz.

Yordam parametrelerinin kullanılması SQL enjeksiyon saldırılarına karşı korunmaya yardımcı olur. Parametre girişi yürütülebilir kod olarak değil değişmez değer olarak ele alındığından, saldırganın yordamın içindeki Transact-SQL deyimlerine komut eklemesi ve güvenliği tehlikeye atması daha zordur.

Kaynak kodunu gizlemeye yardımcı olması için yordamları şifreleyebilirsiniz. Daha fazla bilgi için bkz. SQL Server şifrelemesi.

Kodun yeniden kullanılması

Yinelenen veritabanı işlemlerinin kodu, yordamlarda kapsülleme için mükemmel bir adaydır. Bu yaklaşım aynı kodun gereksiz yeniden yazmalarını ortadan kaldırır, kod tutarsızlığını azaltır ve gerekli izinlere sahip olan tüm kullanıcıların veya uygulamaların koda erişmesine ve kodu yürütmesine izin verir.

Daha kolay bakım

İstemci uygulamaları yordamları çağırdığında ve veritabanı işlemlerini veri katmanında tuttuğunda, yalnızca temel alınan veritabanındaki değişiklikler için yordamları güncelleştirmeniz gerekir. Uygulama katmanı ayrı kalır ve veritabanı düzenlerinde, ilişkilerinde veya işlemlerinde yapılan değişiklikler hakkında bilgi sahibi olması gerekmez.

Geliştirilmiş performans

Varsayılan olarak, bir yordam ilk kez yürütüldüğünde derlenir ve daha sonraki yürütmeler için tekrar tekrar kullandığı bir yürütme planı oluşturur. Sorgu işlemcisi yeni bir plan oluşturmak zorunda kalmadığı için, genellikle yordamın işlenmesi daha kısa sürer.

Yordam tarafından başvurulan tablolarda veya verilerde önemli değişiklikler varsa, ön derlenmiş plan prosedürün daha yavaş çalışmasına yol açabilir. Bu durumda, yordamı yeniden derlemek ve yeni bir yürütme planı oluşturmak performansı artırabilir.

Saklı yordam türleri

User-defined

Kullanıcı tanımlı bir yordam, kullanıcı tanımlı bir veritabanında veya Resource veritabanı hariç tüm sistem veritabanlarında oluşturulabilir. Prosedür, Transact-SQL'de veya .NET Framework ortak dil çalışma zamanı (CLR) yöntemine referans olarak geliştirilebilir.

Temporary

Geçici yordamlar, kullanıcı tanımlı yordamların bir biçimidir. Geçici yordamlar, kalıcı yordamlar gibidir, ancak tempdb'de depolanırlar. İki tür geçici yordam vardır: yerel ve genel. Adlarında, görünürlüklerinde ve kullanılabilirliklerinde birbirinden farklıdırlar. Yerel geçici yordamların adlarının ilk karakteri olarak tek bir sayı işareti (#) vardır. Bunlar yalnızca geçerli kullanıcı bağlantısı tarafından görülebilir ve bağlantı kapatıldığında silinir. Küresel geçici prosedürler, isimlerinin ilk iki karakteri olarak iki sayı simgesine (##) sahiptir. Oluşturulduktan sonra tüm kullanıcılar tarafından görülebilirler ve son oturumun sonunda yordamı kullanılarak silinirler.

System

Sistem yordamları Veritabanı Altyapısı'na dahil edilir. Bunlar fiziksel olarak iç, gizli Resource veritabanında depolanır ve mantıksal olarak sistem tanımlı ve kullanıcı tanımlı her veritabanının şemasında sys görünür. Ayrıca veritabanı, msdb içindeki dbo şemasında uyarıları ve işleri zamanlamak için kullanılan sistem saklı yordamlarını da içerir. Sistem yordamları ön ekiyle sp_başladığından, kullanıcı tanımlı yordamları adlandırırken bu ön eki kullanmayın. Sistem yordamlarının tam listesi için bkz . Sistem saklı yordamları.

SQL Server, çeşitli bakım etkinlikleri için SQL Server'dan dış programlara arabirim sağlayan sistem yordamlarını destekler. Bu genişletilmiş yordamlar ön eki kullanır xp_ . Genişletilmiş yordamların tam listesi için bkz. Genel genişletilmiş saklı yordamlar.

Genişletilmiş kullanıcı tanımlı

Genişletilmiş yordamlar, C gibi bir programlama dilinde dış yordamlar oluşturulmasını sağlar. Bu yordamlar, BIR SQL Server örneğinin dinamik olarak yükleyip çalıştırabileceği DLL'lerdir.

Note

Genişletilmiş saklı yordamlar SQL Server'ın gelecekteki bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmayın ve şu anda bu özelliği kullanan uygulamaları en kısa sürede değiştirin. Bunun yerine CLR yordamları oluşturun. Bu yöntem, genişletilmiş yordamlar yazmaya daha sağlam ve güvenli bir alternatif sağlar.

Görev açıklaması Article
Saklı prosedürün nasıl oluşturulacağını açıklar. Saklı yordam oluştur
Saklı yordamın nasıl değiştirileceği açıklanır. Bir saklı yordamı değiştirin
Saklı yordamın nasıl silineceği açıklanır. Saklı yordamı sil
Saklı yordamın nasıl yürütülür açıklanmaktadır. Saklı yordamı çalıştır
Saklı prosedür üzerinde nasıl izin verileceği anlatılır. Bir saklı yordamda izin verme yetkisi tanımlama
Saklı yordamdaki verilerin bir uygulamaya nasıl döndürüleceği açıklanır. Saklı yordamdan veri döndürme
Saklı bir yordamın nasıl yeniden derleneceğini açıklar. Saklı yordamı yeniden derleyin
Saklı yordamın nasıl yeniden adlandırıldığı açıklanır. Saklı yordamı yeniden adlandırma
Saklı yordamın tanımını görüntülemeyi açıklar. Saklı yordamın tanımını görüntüleme
Saklı yordamdaki bağımlılıkların nasıl görüntüleyebileceğinizi açıklar. Saklı yordamın bağımlılıklarını görüntüleme
Parametrelerin saklı prosedürde nasıl kullanıldığını açıklar. Parameters