T-SQL'de saklı yordamlar - oluşturun, değiştirin, silin. SQL Server ms sql saklı yordamlarında saklı yordamlar nasıl doğru yazılır

saklı yordam yalnızca prosedürün bulunduğu veritabanı bağlamında gerçekleştirilmesi durumunda mümkündür.

saklı yordam türleri

SQL Server'da birkaç tür vardır saklı prosedürler.

  • sistemik saklı prosedürlerçeşitli idari işlemleri gerçekleştirmek için tasarlanmıştır. Hemen hemen tüm sunucu yönetimi eylemleri onların yardımıyla gerçekleştirilir. sistem diyebiliriz saklı prosedürler sonuçta hem kullanıcı hem de sistem veritabanlarının sistem tablolarından veri değiştirme, ekleme, silme ve getirme olarak özetlenen sistem tablolarıyla çalışmayı sağlayan bir arayüzdür. sistemik saklı prosedürlerön eki sp_'dir, sistem veritabanında depolanır ve herhangi bir başka veritabanı bağlamında çağrılabilir.
  • Gelenek saklı prosedürler belirli eylemleri gerçekleştirin. saklı prosedürler- tam teşekküllü bir veritabanı nesnesi. Sonuç olarak, her saklı yordam yürütüldüğü belirli bir veritabanında bulunur.
  • Geçici saklı prosedürler yalnızca bir süre için var olurlar, ardından sunucu tarafından otomatik olarak yok edilirler. Yerel ve küresel olarak ikiye ayrılırlar. Yerel geçici saklı prosedürler yalnızca oluşturuldukları bağlantıdan çağrılabilir. Böyle bir prosedür oluşturduğunuzda, ona tek bir # karakteri ile başlayan bir isim vermeniz gerekir. Tüm geçici nesneler gibi, saklı prosedürler bu türden olanlar, kullanıcının bağlantısı kesildiğinde, sunucuyu yeniden başlattığında veya durdurduğunda otomatik olarak silinir. küresel geçici saklı prosedürler aynı prosedüre sahip herhangi bir sunucu bağlantısı için kullanılabilir. Tanımlamak için ## sembolleriyle başlayan bir isim vermeniz yeterlidir. Bu prosedürler, sunucu yeniden başlatıldığında veya durdurulduğunda veya oluşturuldukları bağlamdaki bağlantı kapatıldığında silinir.

Saklı Prosedürleri Oluşturma, Değiştirme ve Silme

oluşturma saklı yordam aşağıdaki görevlerin çözümünü üstlenir:

  • oluşturulan türün belirlenmesi saklı yordam: geçici veya özel. Ayrıca kendi sisteminizi oluşturabilirsiniz. saklı yordam ona sp_ ön eki olan bir isim vererek ve onu yerleştirerek sistem tabanı veri. Bu prosedür, yerel sunucudaki herhangi bir veritabanı bağlamında mevcut olacaktır;
  • erişim haklarının planlanması. oluştururken saklı yordam veritabanı nesnelerine, onu oluşturan kullanıcıyla aynı erişim haklarına sahip olacağı akılda tutulmalıdır;
  • tanım saklı yordam parametreleri... Çoğu programlama dilinde bulunan prosedürler gibi, saklı prosedürler giriş ve çıkış parametrelerine sahip olabilir;
  • kod geliştirme saklı yordam... Prosedür kodu, diğerlerine yapılan çağrılar da dahil olmak üzere herhangi bir SQL komutunun bir dizisini içerebilir. saklı prosedürler.

Yeni bir tane oluşturma ve mevcut olanı değiştirme saklı yordam aşağıdaki komutla yapılır:

<определение_процедуры>:: = (CREATE | ALTER) prosedür_adı [; sayı] [(@ parametre_adı veri türü) [= varsayılan]] [, ... n] AS sql_operator [... n]

Şimdi bu komutun parametrelerini ele alalım.

Sp_, #, ## önekleri kullanılarak oluşturulan prosedür sistem veya geçici olarak tanımlanabilir. Komut sözdiziminden de görebileceğiniz gibi, oluşturulan prosedürün sahibi olacak sahibinin adının yanı sıra bulunması gereken veritabanının adının belirtilmesine izin verilmez. Böylece, oluşturulan yerleştirmek için saklı yordam belirli bir veritabanında, o veritabanı bağlamında CREATE PROCEDURE komutunu çalıştırmalısınız. Vücut dışında işlem yaparken saklı yordam aynı veritabanındaki nesneler için kısaltılmış adlar kullanabilirsiniz, yani veritabanı adını belirtmeden. Diğer veritabanlarında bulunan nesnelere başvurmanız gerektiğinde, veritabanının adının belirtilmesi gerekir.

İsimdeki numara kimlik numarasıdır saklı yordam, bu da onu bir dizi prosedürde benzersiz bir şekilde tanımlar. Yönetim prosedürlerinin rahatlığı için, mantıksal olarak aynı türden saklı prosedürler aynı ad, ancak farklı kimlik numaraları verilerek gruplandırılabilir.

Oluşturulan sistemde giriş ve çıkış verilerini aktarmak için saklı yordam yerel değişkenlerin adları gibi adları @ simgesiyle başlaması gereken parametreler kullanılabilir. Bir saklı yordam virgülle ayırarak birçok parametre belirtilebilir. Bir prosedürün gövdesi, adları bu prosedürün parametrelerinin adlarıyla aynı olan yerel değişkenleri kullanmamalıdır.

Karşılık gelen veri türünü belirlemek için saklı yordam parametresi, her tür uygundur SQL verileri kullanıcı tanımlı dahil. Ancak, CURSOR veri türü yalnızca şu şekilde kullanılabilir: çıkış parametresi saklı yordam, yani OUTPUT anahtar sözcüğünü belirterek.

OUTPUT anahtar sözcüğünün varlığı, karşılık gelen parametrenin veri döndürmeyi amaçladığı anlamına gelir. saklı yordam... Ancak bu, parametrenin değerleri aktarmak için uygun olmadığı anlamına gelmez. saklı yordam... OUTPUT anahtar sözcüğünü belirtmek, sunucuya çıkış yapması talimatını verir. saklı yordam yordam çağrılırken parametre değeri olarak belirtilen yerel değişkene parametrenin geçerli değerini atayın. OUTPUT anahtar sözcüğü belirtildiğinde, bir prosedür çağrılırken karşılık gelen parametrenin değerinin yalnızca yerel bir değişken kullanılarak ayarlanabileceğini unutmayın. Normal parametreler için geçerli olan herhangi bir ifade veya sabit kullanmanıza izin verilmez.

VARYING anahtar sözcüğü şununla birlikte kullanılır:

Şöyle çalışma Rehberi nasıl olduğunu öğreneceksin SQL Server'da prosedürler oluşturun ve bırakın(Transact-SQL) sözdizimi ve örneklerle.

Açıklama

SQL Server'da prosedür, parametreleri iletebileceğiniz depolanmış bir programdır. Fonksiyon gibi bir değer döndürmez. Ancak, kendisini çağıran prosedüre bir başarı/başarısızlık durumu döndürebilir.

Prosedür Oluştur

SQL Server'da (Transact-SQL) kendi saklı yordamlarınızı oluşturabilirsiniz. Hadi daha yakından bakalım.

Sözdizimi

SQL Server'daki (Transact-SQL) Prosedürlerin sözdizimi şöyledir:

CREATE (PROSEDÜR | PROC) prosedür_adı
[@parametre veri türü
[DEĞİŞKEN] [= varsayılan] [ÇIKIŞ | ÇIKTI | SADECE OKU]
, @parametre veri türü
[DEĞİŞKEN] [= varsayılan] [ÇIKIŞ | ÇIKTI | SADECE OKU]]
[İLE (ŞİFRELEME | RECOMPILE | EXECUTE AS Cümlesi)]
[ÇOĞALTMA İÇİN]
OLARAK
BAŞLAMAK
yürütülebilir_bölüm
SON;

Parametreler veya bağımsız değişkenler

schema_name, saklı yordamın ait olduğu şemanın adıdır.
prosedür_adı, SQL Server'da bu prosedürün atanacağı isimdir.
@parameter - prosedüre bir veya daha fazla parametre iletilir.
type_schema_name, varsa, veri türüne sahip olan şemadır.
Datatype, @parameter için veri türüdür.
VARYING - Sonuç kümesi bir çıktı parametresi olduğunda imleç parametreleri için belirtilir.
default, @parametresine atanacak varsayılan değerdir.
OUT - Bu, @parametrenin bir çıktı parametresi olduğu anlamına gelir.
ÇIKIŞ - Bu, @ parametresinin bir çıkış parametresi olduğu anlamına gelir.
SADECE OKUYUN - Bu, saklı yordam tarafından @ parametresinin üzerine yazılamayacağı anlamına gelir.
ŞİFRELEME - Bu, saklı yordamın kaynağının SQL Server sistem görünümlerinde düz metin olarak kaydedilmeyeceği anlamına gelir.
RECOMPILE - Bu, sorgu planının bu saklı yordam için önbelleğe alınmayacağı anlamına gelir.
EXECUTE AS - Saklı yordamı yürütmek için güvenlik bağlamını ayarlar.
ÇOĞALTMA İÇİN - Bu, saklı yordamın yalnızca çoğaltma sırasında yürütüldüğü anlamına gelir.

Örnek

SQL Server'da (Transact-SQL) bir saklı yordamın nasıl oluşturulacağına dair bir örneğe bakalım.
Aşağıda prosedürün basit bir örneği verilmiştir:

Transact-SQL

PROSEDÜR OLUŞTURMA FindSite @site_name VARCHAR (50) BAŞLADIĞI GİBİ DECLARE @site_id INT; SET @site_id = 8; EĞER @site_id< 10 SET @site_name = "yandex.com"; ELSE SET @site_name = "google.com"; END;

PROSEDÜR OLUŞTURMA FindSite

@ site_name VARCHAR (50) ÇIKIŞ

BAŞLAMAK

DECLARE @ site_id INT;

SET @ site_id = 8;

EĞER @ site_id< 10

SET @ site_name = "yandex.com";

BAŞKA

SET @ site_name = "google.com";

SON;

Bu prosedüre FindSite denir. @site_id değişkenine göre güncellenen bir çıktı parametresi olan @site_name adlı bir parametreye sahiptir.

Ardından aşağıdaki gibi FindSite adlı yeni bir saklı yordama başvurabilirsiniz.

Saklı yordam SQL dili ve yordamsal uzantılar kullanılarak oluşturulan özel bir Transact-SQL deyimi grubudur. Paket ve saklı yordam arasındaki temel fark, ikincisinin bir veritabanı nesnesi olarak saklanmasıdır. Başka bir deyişle, performansı ve tekrarlanabilirliği artırmak için sunucu tarafında saklı yordamlar sürdürülür.

Veritabanı Motoru, saklı yordamları ve sistem yordamlarını destekler. Saklı yordamlar, diğer tüm veritabanı nesneleri ile aynı şekilde oluşturulur, yani. DDL dilini kullanarak. Sistem prosedürleri Veritabanı Motoru tarafından sağlanır ve sistem kataloğundaki bilgilere erişmek ve bunları değiştirmek için kullanılabilir.

Saklı yordam oluştururken isteğe bağlı bir parametre listesi tanımlayabilirsiniz. Böylece, prosedür her çağrıldığında uygun argümanları kabul edecektir. Saklı yordamlar, kullanıcı tanımlı bilgileri içeren bir değer veya bir hata durumunda ilişkili bir hata mesajı döndürebilir.

Saklı yordam, veritabanında bir nesne olarak depolanmadan önce derlenir. Prosedürün önceden derlenmiş formu veri tabanında saklanır ve her çağrıldığında kullanılır. Saklı yordamların bu özelliği, (neredeyse tüm durumlarda) yordamın yeniden derlenmesinin ortadan kaldırılması ve buna göre performans iyileştirmelerinin elde edilmesi bakımından önemli bir fayda sağlar. Saklı yordamların bu özelliği, veritabanı sistemi ve uygulamalar arasında değiş tokuş edilen veri miktarı üzerinde de olumlu bir etkiye sahiptir. Özellikle, boyutu birkaç bin bayt olan bir saklı yordama yapılan bir çağrı, 50 bayttan daha az gerektirebilir. Birden çok kullanıcı, saklı yordamlar kullanarak tekrarlayan görevler gerçekleştirdiğinde, bu tasarrufların kümülatif etkisi önemli olabilir.

Saklı yordamlar aşağıdaki amaçlar için de kullanılabilir:

    veritabanı tablolarıyla bir eylem günlüğü oluşturmak için.

Saklı yordamların kullanımı, kullanıcılara farklı erişim ayrıcalıkları veren GRANT ve REVOKE deyimlerinin kullanılmasıyla sağlanan güvenlik düzeyini önemli ölçüde aşan bir güvenlik denetimi düzeyi sağlar. Bu mümkündür, çünkü bir saklı yordamı yürütme yetkisi, bir sonraki bölümde açıklandığı gibi, belirli bir saklı yordamda yer alan nesneleri değiştirme yetkisinden bağımsızdır.

Tablolar üzerinde yazma ve/veya okumalar için günlükler oluşturan saklı yordamlar, veritabanı için ek güvenlik sağlar. Bu prosedürleri kullanarak, veritabanı yöneticisi, kullanıcılar veya uygulamalar tarafından veritabanında yapılan değişiklikleri izleyebilir.

Saklı Prosedürler Oluşturma ve Yürütme

Saklı yordamlar ifade kullanılarak oluşturulur PROSEDÜR OLUŞTUR aşağıdaki sözdizimine sahip:

CREATE PROC proc_name [((@ param1) type1 [DEĞİŞEN] [= varsayılan1])] (,…) toplu olarak | HARİCİ ADI method_name Sözdizimi Kuralları

schema_name parametresi, oluşturulan saklı yordamın sahibi olarak atanan şemanın adını belirtir. proc_name parametresi, saklı yordamın adını belirtir. @ param1 parametresi, veri tipi type1 parametresi tarafından belirlenen bir prosedür parametresidir (resmi argüman). Prosedür parametreleri bir prosedür içinde yereldir, tıpkı yerel değişkenlerin bir paket içinde yerel olması gibi. Prosedür parametreleri, arayan tarafından içinde kullanılmak üzere prosedüre geçirilen değerlerdir. default1 parametresi, karşılık gelen prosedür parametresi için varsayılan değeri tanımlar. (Varsayılan NULL da olabilir.)

ÇIKIŞ seçeneği bir prosedür parametresinin, saklı bir prosedürden çağıran prosedüre veya sisteme bir değer döndürmek için kullanılabilen, döndürülebilir bir parametre olduğunu gösterir.

Daha önce belirtildiği gibi, prosedürün önceden derlenmiş formu veritabanında saklanır ve her çağrıldığında kullanılır. Herhangi bir nedenle saklı yordamın her çağrıldığında derlenmesi gerekiyorsa, yordamı bildirirken şunu kullanın: RECOMPILE İLE seçenek... İLE RECOMPILE seçeneğinin kullanılması, en çok önemli avantajlar Saklı Yordamlar: Tek bir derleme ile performansı artırma. Bu nedenle, RECOMPILE İLE seçeneği yalnızca saklı yordam tarafından kullanılan veritabanı nesnelerinde sık sık değişiklik yaparken kullanılmalıdır.

EXECUTE AS yan tümcesi saklı yordamın çağrıldıktan sonra yürütülmesi gereken güvenlik bağlamını tanımlar. Bu bağlamı ayarlayarak, bu saklı yordam tarafından başvurulan nesnelerde erişim izinlerini denetlemek için kullanıcı hesaplarının seçimini denetlemek için Veritabanı Altyapısını kullanabilirsiniz.

Varsayılan olarak, yalnızca sysadmin sabit sunucu rolü ve db_owner veya db_ddladmin sabit veritabanı rolünün üyeleri CREATE PROCEDURE ifadesini kullanabilir. Ancak bu rollerin üyeleri, talimatı kullanarak bu hakkı diğer kullanıcılara atayabilir. HİBE OLUŞTURMA PROSEDÜRÜ.

Aşağıdaki örnek, Proje tablosuyla çalışmak için basit bir saklı yordamın nasıl oluşturulacağını gösterir:

SampleDb'yi KULLANIN; GO PROSEDÜR OLUŞTURMA PROSEDÜRÜ ArtışBütçesini (@yüzde INT = 5) GÜNCELLEME OLARAK PROJE AYARLA Bütçe = Bütçe + Bütçe * @ yüzde / 100;

Daha önce belirtildiği gibi, iki paketi ayırmak için şunu kullanın: GO talimatı... CREATE PROCEDURE ifadesi, aynı paketteki diğer Transact-SQL ifadeleriyle birleştirilemez. BoostBudget saklı yordamı, tüm projeler için bütçeleri @percent parametresiyle belirtilen belirli bir yüzde sayısı kadar artırır. Prosedür ayrıca, prosedür sırasında bu argüman mevcut değilse kullanılan varsayılan bir yüzde değeri (5) tanımlar.

Saklı yordamlar var olmayan tablolara erişebilir. Bu özellik, önce uygun tabloları oluşturmadan, hatta hedef sunucuya bağlanmadan prosedür kodunda hata ayıklamanıza izin verir.

Her zaman geçerli veritabanında saklanan temel saklı yordamların aksine, her zaman geçici sistem veritabanı tempdb'ye yerleştirilen geçici saklı yordamlar oluşturmak mümkündür. Geçici saklı yordamlar oluşturmanın bir nedeni, bir veritabanına bağlanırken belirli bir grup ifadenin tekrar tekrar yürütülmesini önlemek olabilir. Yerel veya küresel geçici prosedürler oluşturabilirsiniz. Bunun için yerel prosedürün adı tek bir # sembolü (#proc_name) ile belirtilir ve global prosedürün adı bir double (## proc_name) ile belirtilir.

Yerel bir geçici saklı yordam, yalnızca onu oluşturan kullanıcı tarafından ve yalnızca oluşturulduğu veritabanına bağlantı sırasında yürütülebilir. Genel bir geçici prosedür tüm kullanıcılar tarafından yürütülebilir, ancak yalnızca yürütüldüğü son bağlantı bitene kadar (genellikle prosedürü oluşturanın bağlantısı).

Bir saklı yordamın yaşam döngüsü iki aşamadan oluşur: oluşturulması ve yürütülmesi. Her prosedür bir kez oluşturulur ve tekrar tekrar yürütülür. saklı yordam tarafından yürütülür EXECUTE ifadeleri bir prosedüre sahip olan veya bu prosedüre erişmek için YÜRÜTME iznine sahip bir kullanıcı. EXECUTE deyimi aşağıdaki sözdizimine sahiptir:

[] [@return_status =] (proc_name | @proc_name_var) ([[@ parametre1 =] değer | [@ parametre1 =] @değişken] | DEFAULT) .. Sözdizimi kuralları

return_status parametresi dışında, EXECUTE ifadesinin tüm parametreleri, CREATE PROCEDURE ifadesinin aynı adı taşıyan parametreleriyle aynı mantıksal anlama sahiptir. return_status parametresi, yordamın dönüş durumunu saklayan bir tamsayı değişkeni tanımlar. Bir sabit (değer) veya yerel bir değişken (@değişken) kullanılarak bir parametreye bir değer atanabilir. Adlandırılan parametrelerin değerlerinin sırası önemli değildir ancak adsız parametrelerin değerleri CREATE PROCEDURE deyiminde tanımlandıkları sıraya göre verilmelidir.

DEFAULT yan tümcesi prosedür tanımında belirtilen bir prosedür parametresi için varsayılan değerler sağlar. Bir prosedür, hiçbir varsayılan değerin tanımlanmadığı ve parametrenin eksik olduğu bir parametre için bir değer beklediğinde veya anahtar kelime DEFAULT sonra bir hata oluşur.

EXECUTE ifadesi bir toplu işteki ilk ifade olduğunda, EXECUTE anahtar sözcüğü atlanabilir. Ancak, bu kelimeyi her pakete dahil etmek daha güvenlidir. EXECUTE ifadesinin kullanımı aşağıdaki örnekte gösterilmiştir:

SampleDb'yi KULLANIN; UYGULAMA ArtışBütçesi 10;

Bu örnekteki EXECUTE ifadesi, tüm projeler için bütçeyi %10 artıran BoostBudget saklı yordamını yürütür.

Aşağıdaki örnek, Employee ve Works_on tablolarındaki verileri işlemek için bir saklı yordamın nasıl oluşturulacağını gösterir:

Örnekteki ModifyEmpId yordamı, başvuru bütünlüğü sürecinin bir parçası olarak saklı yordamların kullanımını gösterir (içinde bu durumÇalışan ve Works_on tabloları arasında). Benzer bir saklı yordam, gerçekten bilgi bütünlüğünü zorlayan bir tetikleyici tanımı içinde kullanılabilir.

Aşağıdaki örnek, bir saklı yordamda OUTPUT yan tümcesinin kullanımını gösterir:

Bu saklı yordam aşağıdaki talimatlar kullanılarak yürütülebilir:

DECLARE @quantityDeleteEmployee INT; EXECUTE DeleteEmployee @ empId = 18316, @ OUTPUT; PRINT N "Silinen çalışanlar:" + convert (nvarchar (30), @quantityDeleteEmployee);

Bu prosedür, personel numarası @empId olan çalışanın meşgul olduğu proje sayısını sayar ve elde edilen değeri parametre © sayacına atar. Çalışan ve Works_on tablolarından belirli bir personel numarası için tüm satırlar silindikten sonra hesaplanan değer @quantityDeleteEmployee değişkenine atanır.

Parametre değeri, yalnızca ÇIKIŞ seçeneği belirtilmişse, çağıran prosedüre döndürülür. Yukarıdaki örnekte, DeleteEmployee prosedürü, @counter parametresini çağıran prosedüre iletir, böylece saklı prosedür sisteme bir değer döndürür. Bu nedenle @counter parametresi hem bir prosedür bildirilirken OUTPUT seçeneğinde hem de çağrılırken EXECUTE deyiminde belirtilmelidir.

EXECUTE deyiminin RESULTS SETS yan tümcesi

SQL Server 2012'de EXECUTE ifadesi girilir İLE RESULTS SETS yan tümcesi, aracılığıyla, belirli koşullar karşılandığında, saklı yordamın sonuç kümesinin biçimini değiştirebilirsiniz.

Aşağıdaki iki örnek bu cümleyi açıklamaya yardımcı olacaktır. İlk örnek, WITH RESULTS SETS yan tümcesi çıkarıldığında sonucun nasıl görünebileceğini gösteren bir giriş örneğidir:

ÇalışanlarInDept prosedürü, belirli bir departmanda çalışan tüm çalışanların personel numaralarını ve soyadlarını görüntüleyen basit bir prosedürdür. Departman numarası prosedürün bir parametresidir ve çağrılırken belirtilmelidir. Bu prosedürün yürütülmesi, başlıkları veritabanı tablosunun ilgili sütunlarının adlarıyla çakışan iki sütunlu bir tablo görüntüler; Kimlik ve Soyadı. SQL Server 2012, sonuç sütun başlıklarını (veri türlerinin yanı sıra) değiştirmek için yeni WITH RESULTS SETS yan tümcesini kullanır. Bu teklifin uygulaması aşağıdaki örnekte gösterilmiştir:

SampleDb'yi KULLANIN; SONUÇ KÜMELERİYLE YÜRÜTÜN ÇalışanInDept "d1" ((INT NOT NULL, [Soyadı] CHAR (20) NULL DEĞİL));

Bu şekilde çağrılan bir saklı yordamın yürütülmesinin sonucu aşağıdaki gibi olacaktır:

Gördüğünüz gibi, EXECUTE deyimindeki WITH RESULT SETS yan tümcesini kullanarak saklı yordamı çalıştırmak, yordam tarafından döndürülen sonuç kümesindeki sütunların adlarını ve veri türünü değiştirmenize olanak tanır. Böylece, bu yeni işlevsellik, saklı yordamları yürütmede ve sonuçlarını yeni bir tabloya yerleştirmede daha fazla esneklik sağlar.

Saklı yordamların yapısını değiştirme

Veritabanı Motoru da deyimi destekler PROSEDÜR DEĞİŞTİRME saklı yordamların yapısını değiştirmek için. ALTER PROCEDURE genellikle bir prosedür içinde Transact-SQL deyimlerini değiştirmek için kullanılır. ALTER PROCEDURE ifadesinin tüm parametreleri, CREATE PROCEDURE ifadesinin aynı adı taşıyan parametreleriyle aynı anlama sahiptir. Bu ifadeyi kullanmanın temel amacı, mevcut saklı yordam haklarını geçersiz kılmaktan kaçınmaktır.

Veritabanı Motoru şunları destekler: veri türü İMLEÇ... Bu veri türü, saklı yordamlarda imleçleri bildirmek için kullanılır. imleç bir sorgunun sonuçlarını (genellikle bir dizi satır) depolamak ve kullanıcıların bu sonucu satır satır görüntülemesini sağlamak için kullanılan bir programlama yapısıdır.

Bir veya bir grup saklı yordamı silmek için şunu kullanın: DROP PROSEDÜRÜ ifadesi... Yalnızca db_owner ve sysadmin sabit rollerinin sahibi veya üyeleri saklı yordamı silebilir.

Saklı Prosedürler ve CLR

SQL Server, çeşitli veritabanı nesnelerinin (depolanmış yordamlar, UDF'ler, tetikleyiciler, UDF'ler ve UDD'ler) C # ve Visual Basic... CLR, bu nesnelerin ortak çalışma zamanı sistemi kullanılarak yürütülmesine de izin verir.

CLR'ye seçenek tarafından izin verilir ve reddedilir clr_enabled sistem prosedürü sp_configure, talimat tarafından yürütülmek üzere başlatılan YENİDEN YAPILANDIR... Aşağıdaki örnek, sp_configure sistem prosedürü kullanılarak CLR'nin nasıl etkinleştirilebileceğini gösterir:

SampleDb'yi KULLANIN; EXEC sp_configure "clr_enabled", 1 YENİDEN YAPILANDIRMA

CLR kullanarak bir yordam oluşturmak, derlemek ve kaydetmek için aşağıdaki adımları sırasıyla tamamlamanız gerekir:

    C# veya Visual Basic'te saklı bir yordam oluşturun ve ardından uygun derleyiciyi kullanarak bunu derleyin.

    talimatı kullanma MONTAJ OLUŞTUR, ilgili yürütülebilir dosyayı oluşturun.

    EXECUTE deyimini kullanarak prosedürü yürütün.

Aşağıdaki şekil, daha önce özetlenen adımların bir akış şemasını göstermektedir. Aşağıdaki daha Detaylı Açıklama bu süreç.

İlk önce gerekli programı aşağıdaki gibi bazı geliştirme ortamlarında oluşturun Görsel stüdyo... derlemek hazır program C # veya Visual Basic derleyicisini kullanarak nesne koduna. Bu kod, yürütülebilir ara kod üreten CREATE ASSEMBLY ifadesinin kaynağı olan bir dinamik bağlantı kitaplığı (.dll) dosyasına kaydedilir. Ardından, yürütülebilir kodu bir veritabanı nesnesi olarak kaydetmek için CREATE PROCEDURE ifadesini çalıştırın. Son olarak, tanıdık EXECUTE deyimini kullanarak prosedürü çalıştırın.

Aşağıdaki örnek, C#'da saklı bir yordamın kaynak kodunu gösterir:

System.Data.SqlClient'i kullanma; Microsoft.SqlServer.Server'ı kullanarak; genel kısmi sınıf StoredProcedures (genel statik int CountEmployees () (int satırlar; SqlConnection bağlantı = yeni SqlConnection ("Bağlam Bağlantısı = doğru"); connection.Open (); SqlCommand cmd = bağlantı.CreateCommand (); cmd.CommandText = "select (*) "Çalışan Sayısı" olarak "+" Çalışandan "; satırlar = (int) cmd.ExecuteScalar (); connection.Close (); satırları döndür;))

Bu prosedür, Çalışan tablosundaki satır sayısını saymak için bir sorgu uygular. Programın başındaki using yönergeleri, programı yürütmek için gereken ad alanlarını belirtir. Bu direktiflerin kullanımı, aşağıdakileri belirtmenize izin verir: kaynak kodu ilgili ad alanlarını açıkça belirtmeden sınıf adları. Ardından, StoredProcedures sınıfı tanımlanır, bunun için SqlProcedure özniteliği bu, derleyiciye bu sınıfın saklı bir prosedür olduğunu bildirir. CountEmployees() yöntemi, sınıf kodunun içinde tanımlanır. Veritabanı sistemine bağlantı, sınıfın bir örneği aracılığıyla kurulur. SQL Bağlantısı... Bir bağlantı açmak için o örneğin Open () yöntemi kullanılır. A CreateCommand() yöntemi sınıfın bir örneğine erişmenizi sağlar SqlKomut gerekli SQL komutunun iletildiği.

Aşağıdaki kod parçasında:

Cmd.CommandText = "sayıyı (*)" Çalışan Sayısı "" + "Çalışandan" olarak seçin;

Çalışan tablosundaki satır sayısını saymak ve sonucu görüntülemek için bir SELECT ifadesi kullanır. Komut metni, CreateCommand() yöntemi tarafından döndürülen örnek cmd değişkeninin CommandText özelliğine atanarak belirtilir. Sonraki denir ExecuteScalar() yöntemi bir SqlCommand örneği. Bu yöntem, int veri türüne dönüştürülen ve satırlara atanan bir skaler değer döndürür.

Artık bu kodu Visual Studio ortamını kullanarak derleyebilirsiniz. Bu sınıfı CLRStoredProcedures adlı projeye ekledim, böylece Visual Studio aynı isimli derlemeyi * .dll uzantısıyla derleyecek. Aşağıdaki örnek, bir saklı yordam oluşturmanın sonraki adımını gösterir: yürütülebilir kod oluşturma. Bu örnekteki kodu çalıştırmadan önce, derlenmiş dll dosyasının (genellikle projenin Debug klasöründe bulunur) konumunu bilmeniz gerekir.

SampleDb'yi KULLANIN; GİT, PERMISSION_SET = GÜVENLİ "D: \ Projects \ CLRStoredProcedures \ bin \ Debug \ CLRStoredProcedures.dll" İLE MONTAJ CLRStoredProcedures OLUŞTURUN

CREATE ASSEMBLY ifadesi, yönetilen kodu girdi olarak alır ve kendisi için CLR saklı yordamlar, UDF'ler ve tetikleyiciler oluşturabileceğiniz uygun bir nesne oluşturur. Bu ifade aşağıdaki sözdizimine sahiptir:

CREATE ASSEMBLY Assembly_name [YETKİ sahibi_adı] FROM (dll_file) Sözdizimi Kuralları

Assembly_name, derlemenin adını belirtir. İsteğe bağlı AUTHORIZATION yan tümcesi, bu derlemenin sahibi olarak rol adını belirtir. FROM yan tümcesi, yüklenen derlemenin bulunduğu yolu belirtir.

İLE PERMISSION_SET yan tümcesi CREATE ASSEMBLY ifadesinin çok önemli bir maddesidir ve her zaman dahil edilmelidir. Derleme koduna verilen erişim hakları kümesini tanımlar. GÜVENLİ haklar grubu en kısıtlayıcı olanıdır. Bu haklara sahip olan derleme kodu, dosyalar gibi harici sistem kaynaklarına erişemez. EXTERNAL_ACCESS ayrıcalık seti, derleme kodunun belirli harici sistem kaynaklarına erişmesine izin verirken, UNSAFE ayrıcalık seti, hem veritabanı sisteminin içindeki hem de dışındaki kaynaklara sınırsız erişim sağlar.

Kullanıcı, derleme kodu bilgilerini korumak için CREATE ASSEMBLY deyimini yürütebilmelidir. Derlemenin sahibi, bu ifadeyi yürüten kullanıcıdır (veya rol). CREATE SCHEMA ifadesinin AUTHORIZATION yan tümcesini kullanarak derleme sahibini başka bir kullanıcı yapabilirsiniz.

Veritabanı Motoru ayrıca ALTER ASSEMBLY ve DROP ASSEMBLY deyimlerini de destekler. ALTER MONTAJ Beyanı derlemeyi güncellemek için kullanılır En son sürüm... Bu ifade ayrıca ilgili derlemeyle ilişkili dosyaları ekler veya kaldırır. DROP MONTAJ Beyanı belirtilen derlemeyi ve tüm ilişkili dosyaları geçerli veritabanından kaldırır.

Aşağıdaki örnek, daha önce uyguladığınız yönetilen koda dayalı olarak bir saklı yordamın nasıl oluşturulacağını gösterir:

SampleDb'yi KULLANIN; GO PROSEDÜR OLUŞTURUN Çalışanları HARİCİ AD OLARAK Say CLRStoedProcedures.StoredProcedures.CountÇalışanlar

Örnekteki CREATE PROCEDURE ifadesi, önceki örneklerdeki aynı ifadeden aşağıdakileri içermesi bakımından farklıdır: HARİCİ AD parametresi... Bu parametre, kodun CLR tarafından oluşturulduğunu gösterir. Bu cümledeki isim üç kısımdır:

derleme_adı.sınıf_adı.yöntem_adı

    Assembly_name Derlemenin adını belirtir.

    sınıf_adı - genel sınıfın adını belirtir;

    yöntem_adı - isteğe bağlı, sınıf içinde belirtilen yöntemin adını belirtir.

CountEmployees prosedürünün yürütülmesi aşağıdaki örnekte gösterilmiştir:

SampleDb'yi KULLANIN; DECLARE @count INT EXECUTE @count = CountEmployees PRINT @count - 7 döndürür

PRINT ifadesi, Çalışan tablosundaki geçerli satır sayısını döndürür.

SQL saklı yordamlar, çeşitli nesneler olarak saklanabilen yürütülebilir yazılım modülleridir. Başka bir deyişle, SQL deyimlerini içeren bir nesnedir. Bu saklı yordamlar, elde etmek için uygulama istemcisinde yürütülebilir. iyi performans... Ayrıca, bu tür nesneler genellikle diğer komut dosyalarından veya hatta başka bir bölümden çağrılır.

Tanıtım

Birçok kişi, farklı prosedürlere benzer olduklarını düşünür (sırasıyla, MS SQL hariç). Belki de bu doğrudur. Benzer parametrelere sahiptirler, benzer değerler verebilirler. Ayrıca, bazı durumlarda dokunurlar. Örneğin, DDL ve DML veritabanları ve kullanıcı işlevleriyle (kod adı UDF) birleştirilebilirler.

Gerçekte, SQL saklı yordamları, onları benzer işlemlerden ayıran çok çeşitli avantajlara sahiptir. Güvenlik, programlama değişkenliği, üretkenlik - tüm bunlar, veritabanlarıyla çalışan kullanıcıları giderek daha fazla cezbetmektedir. Prosedürlerin popülaritesinin zirvesi, Microsoft'tan "SQL Server Management Studio" adlı bir programın piyasaya sürülmesiyle 2005-2010'da geldi. Onun yardımıyla veritabanlarıyla çalışmak çok daha kolay, daha pratik ve daha kullanışlı hale geldi. Yıldan yıla, bu programcılar arasında popülerlik kazanıyordu. Bugün, veritabanlarıyla "iletişim kuran" kullanıcılar için Excel ile eşit düzeyde yükselen kesinlikle tanıdık bir programdır.

Bir prosedür çağrıldığında, gereksiz işlemler ve kullanıcı müdahalesi olmadan anında sunucunun kendisi tarafından işlenir. Bundan sonra herhangi bir silme, yürütme, değişiklik yapabilirsiniz. Bütün bunlar, nesneleri işlemek için en karmaşık işlemleri tek başına gerçekleştiren DDL operatörünün sorumluluğundadır. Üstelik tüm bunlar çok hızlı oluyor ve sunucu aslında yüklü değil. Bu hız ve performans, büyük miktarda bilginin kullanıcıdan sunucuya çok hızlı bir şekilde aktarılmasına ve bunun tersi de mümkündür.

Bilgiyle çalışmak için bu teknolojiyi uygulamak için birkaç programlama dili vardır. Bunlara örneğin Oracle'dan PL / SQL, InterBase ve Firebird sistemlerinde PSQL ve klasik Microsoft Transact-SQL dahildir. Hepsi, büyük veritabanı işleyicilerinin kendi algoritmalarını kullanmalarına izin veren saklı yordamlar oluşturmak ve yürütmek için tasarlanmıştır. Bu aynı zamanda, bu tür bilgileri yönetenlerin tüm nesneleri üçüncü şahıslar tarafından yetkisiz erişime ve buna bağlı olarak belirli verilerin oluşturulması, değiştirilmesi veya silinmesine karşı koruyabilmeleri için gereklidir.

üretkenlik

Bu veritabanı nesneleri çeşitli şekillerde programlanabilir. Bu, kullanıcıların en uygun yöntem türünü seçmelerine olanak tanır, bu da zamandan ve emekten tasarruf sağlar. Ek olarak, prosedür kendi başına gerçekleştirilir, böylece sunucu ve kullanıcı arasında alışveriş yapmak için harcanan büyük zamandan kaçınılır. Ayrıca modül kesinlikle her an yeniden programlanabilir ve istenilen yönde değiştirilebilir. SQL saklı yordamının başlatılma hızına özellikle dikkat etmek gerekir: bu işlem, ona benzer şekilde diğerlerinden daha hızlıdır, bu da onu kullanışlı ve çok yönlü kılar.

Güvenlik

Bu tür bilgi işleme, artan güvenliği garanti etmesi bakımından benzer süreçlerden farklıdır. Bu, diğer kullanıcıların prosedürlere erişiminin tamamen ve tamamen dışlanabilmesi nedeniyle sağlanır. Bu, yöneticinin bilgileri ele geçirme korkusu olmadan kendileriyle bağımsız olarak işlem yapmasına veya Yetkisiz Erişim veritabanına.

Veri transferi

SQL saklı yordamı ve istemci uygulaması arasındaki ilişki, parametrelerin ve dönüş değerlerinin kullanılmasıyla olur. İkincisinin saklı yordama veri aktarması gerekmez, ancak bu bilgi (esas olarak kullanıcının isteği üzerine) SQL için işlenir. Saklı yordam işini tamamladıktan sonra, veri paketlerini (ancak yine isteğe bağlı olarak) kullanarak çağıran uygulamaya geri gönderir. farklı yöntemler, bunun yardımıyla hem SQL saklı yordam çağrısı hem de geri dönüş gerçekleştirilebilir, örneğin:

Çıktı türünde bir parametre kullanarak veri iletme;

Bir return ifadesi kullanarak veri aktarma;

Bir seçme operatörü kullanarak veri iletme.

Şimdi bu sürecin içeriden nasıl göründüğünü anlayalım.

1. SQL'de bir EXEC Saklı Yordam Oluşturma

MS SQL'de (Managment Studio) bir prosedür oluşturabilirsiniz. Prosedür oluşturulduktan sonra, oluşturma prosedürünün operatör tarafından gerçekleştirildiği programlanabilir bir veritabanı düğümünde listelenecektir. Yürütme için SQL saklı yordamları, nesnenin adını içeren bir EXEC işlemi kullanır.

Bir prosedür oluşturulduğunda, önce adı görünür, ardından kendisine atanan bir veya daha fazla parametre üretilir. Parametreler isteğe bağlı olabilir. Parametre(ler) yani işlemin gövdesi yazıldıktan sonra gerekli bazı işlemleri yapmanız gerekmektedir.

Gerçek şu ki, cismin içinde yerel değişkenler bulunabilir ve bu değişkenler de prosedürler için yereldir. Başka bir deyişle, yalnızca bir Microsoft SQL Server prosedürünün gövdesi içinde görüntülenebilirler. Saklı yordamlar daha sonra yerel olarak kabul edilir.

Bu nedenle, bir prosedür oluşturmak için, prosedürün adı ve prosedürün gövdesi olarak en az bir parametreye ihtiyacımız var. Bu durumda harika bir seçeneğin sınıflandırıcıda şema adlı bir prosedür oluşturmak ve yürütmek olduğunu unutmayın.

Prosedürün gövdesi, örneğin bir tablo oluşturma, bir veya daha fazla tablo satırı ekleme, veritabanının türünü ve yapısını oluşturma vb. gibi herhangi bir türden olabilir. Bununla birlikte, prosedürün gövdesi, içindeki belirli işlemlerin yürütülmesini kısıtlar. Önemli sınırlamalardan bazıları aşağıda listelenmiştir:

Gövde başka bir saklı yordam oluşturmamalıdır;

Vücut, nesne hakkında yanlış bir izlenim yaratmamalıdır;

Vücut herhangi bir tetikleyici oluşturmamalıdır.

2. Prosedürün gövdesinde bir değişken ayarlama

Değişkenleri prosedürün gövdesinde yerel yapabilirsiniz ve daha sonra bunlar yalnızca prosedürün gövdesi içinde yer alacaktır. Saklı yordam gövdesinin başında değişkenler oluşturmak iyi bir uygulamadır. Ancak, bu nesnenin gövdesinde herhangi bir yere değişkenler de ayarlayabilirsiniz.

Bazen bir satırda birkaç değişkenin ayarlandığını ve her değişken parametresinin virgülle ayrıldığını fark edeceksiniz. Ayrıca değişkenin önüne @ eklendiğine dikkat edin. Prosedürün gövdesinde, değişkeni istediğiniz yere ayarlayabilirsiniz. Örneğin, @ NAME1 değişkeni, prosedür gövdesinin sonuna doğru bildirilebilir. Bildirilen bir değişkene değer atamak için bir dizi kişisel veri kullanılır. Bir satırda birden fazla değişkenin bildirildiği durumdan farklı olarak, böyle bir durumda yalnızca bir kişisel veri seti kullanılır.

Kullanıcılar genellikle şu soruyu sorar: "Bir prosedürün gövdesindeki bir ifadede birden çok değer nasıl atanır?" İyi. Bu ilginç bir soru ama yapması düşündüğünüzden çok daha kolay. Cevap: "Var = değer seç" gibi çiftler kullanmak. Bu çiftleri virgülle ayırarak kullanabilirsiniz.

Çoğunda çeşitli örnekler insanlar basit bir saklı yordamın nasıl oluşturulacağını ve yürütüleceğini gösterir. Bununla birlikte, bir prosedür, çağıran işlemin kendisine yakın değerlere sahip olacağı (ancak her zaman değil) parametreler alabilir. Çakışırlarsa, vücudun içinde karşılık gelen süreçler başlar. Örneğin, arayandan şehri ve bölgeyi kabul edecek ve ilgili şehir ve bölgeye kaç yazarın ait olduğu hakkında veri döndürecek bir prosedür oluşturursanız. Prosedür, bu yazar sayımını gerçekleştirmek için örneğin Pub'lar gibi veritabanı yazarlarının tablolarını sorgulayacaktır. Örneğin, bu veritabanlarını almak için Google, SQL komut dosyasını SQL2005 sayfasından indirir.

Önceki örnekte, prosedür, İngilizce'de geleneksel olarak @State ve @City olarak adlandırılan iki parametre alır. Veri türü, uygulamada tanımlanan türe karşılık gelir. Prosedürün gövdesinde @TotalAuthors (toplam yazarlar) dahili değişkenleri vardır ve bu değişken onların sayılarını görüntülemek için kullanılır. Ardından, her şeyi hesaplayan sorgu seçimi bölümü görünür. Son olarak, bir print deyimi kullanılarak hesaplanan değer çıktı penceresinde görüntülenir.

SQL'de saklı bir prosedür nasıl yürütülür

Prosedürü tamamlamanın iki yolu vardır. İlk yol, parametreleri ileterek, prosedür adından sonra virgülle ayrılmış bir listenin nasıl yürütüldüğünü gösterir. Diyelim ki iki değerimiz var (önceki örnekte olduğu gibi). Bu değerler @State ve @City prosedür parametreleri kullanılarak toplanır. Parametrelerin bu şekilde geçirilmesinde sıra önemlidir. Bu yönteme argümanların sıralı geçişi denir. İkinci yöntemde, parametreler zaten doğrudan atanmıştır, bu durumda sıra önemli değildir. Bu ikinci yöntem, adlandırılmış bağımsız değişkenleri iletmek olarak bilinir.

Prosedür tipik olandan biraz sapabilir. Her şey önceki örnektekiyle aynıdır, ancak burada parametreler kaydırılır. Yani, önce @City depolanır ve varsayılanın yanında @State depolanır. Varsayılan parametre genellikle ayrı olarak vurgulanır. SQL saklı yordamları yalnızca parametre olarak iletilir. Bu durumda, sağlanan "UT" parametresi, varsayılan "CA" parametresinin yerini alır. İkinci yürütmede, @City parametresi için yalnızca bir bağımsız değişken değeri iletilir ve @State parametresi varsayılan "CA" değerini alır. Deneyimli programcılar, tüm varsayılan değişkenlerin parametre listesinin sonuna yakın olmasını tavsiye eder. Aksi takdirde, yürütme mümkün değildir ve daha sonra daha uzun ve daha karmaşık olan adlandırılmış argümanları iletmek zorunda kalırsınız.

4. SQL Server Saklı Yordamları: Dönüş Yöntemleri

Bir saklı yordamda veri göndermenin üç önemli yolu vardır. Aşağıda listelenmiştir:

Saklı bir yordamın değerini döndürmek;

Saklı yordam parametre çıkışı;

Saklı yordamlardan birini seçme.

4.1 SQL Saklı Yordam Değerlerini Döndürme

Bu teknikte, prosedür yerel bir değişkene bir değer atar ve onu döndürür. Prosedür ayrıca doğrudan sabit bir değer döndürebilir. Aşağıdaki örnekte, toplam yazar sayısını döndüren bir prosedür oluşturduk. Bu prosedürü öncekilerle karşılaştırırsanız, yazdırma değerinin tersine döndüğünü görebilirsiniz.

Şimdi prosedürü nasıl uygulayacağımızı ve dönüş değerini nasıl yazdıracağımızı görelim. Prosedürün yürütülmesi, tüm süreçten sonra gerçekleştirilen bir değişken ve baskı ayarlamayı gerektirir. Print deyimi yerine, Select @RetValue ve OutputValue gibi bir Select deyimi kullanabileceğinizi unutmayın.

4.2 SQL Saklı Yordamlar İçin Parametre Çıktısı

Önceki örnekte gördüğümüz gibi, dönüş değeri tek bir değişkeni döndürmek için kullanılabilir. Çıktı parametresini kullanmak, bir prosedürün arayana bir veya daha fazla değişken değer göndermesine izin verir. Çıktı parametresi, bir prosedür oluştururken bu "Çıktı" anahtar kelimesi ile aynı şekilde gösterilir. Bir parametre çıkış parametresi olarak belirtilirse, prosedür nesnesi ona bir değer atamalıdır. Aşağıda örnekleri görülen SQL saklı yordamları özet bilgilerle birlikte döndürülür.

Örneğimizin iki çıktı adı olacaktır: @TotalAuthors ve @TotalNoContract. Parametre listesinde listelenirler. Bu değişkenlere prosedürün gövdesi içinde değerler atanır. Out parametrelerini kullandığımızda, arayan prosedürün gövdesi içinde ayarlanan değeri görebilir.

Ayrıca bir önceki scriptte MS SQL Server saklı yordamlarını out parametresinde ayarlayan değerleri görmek için iki değişken bildirilmişti. Daha sonra "CA" parametresinin normal değeri verilerek işlem gerçekleştirilir. Aşağıdaki parametreler çıktılanır ve bu nedenle bildirilen değişkenler belirtilen sırada iletilir. Değişkenlerden geçerken output anahtar sözcüğünün de burada ayarlandığını unutmayın. İşlem başarılı olduktan sonra çıkış parametrelerinin döndürdüğü değerler bir mesaj kutusunda görüntülenir.

4.3 SQL saklı yordamlarından birini seçme

Bu teknik, çağıran saklı yordama bir veri tablosu (RecordSet) olarak bir dizi değer döndürmek için kullanılır. Bu SQL örneğinde, @AuthID parametrelerine sahip bir saklı yordam, bu @AuthId parametresini kullanarak döndürülen kayıtları filtreleyerek Authors tablosunu sorgular. Select ifadesi, saklı yordamın arayana neyin döndürüleceğine karar verir. Saklı yordam çalıştığında, AuthId geri iletilir. Burada böyle bir prosedür her zaman yalnızca bir kayıt döndürür veya hiç döndürmez. Ancak saklı yordamın birden fazla kaydı döndürme konusunda herhangi bir kısıtlaması yoktur. Hesaplanan değişkenlerin katılımıyla seçilen parametreler kullanılarak veri dönüşünün çoklu toplamlar sağlayarak gerçekleştiği örneklere rastlamak nadir değildir.

Nihayet

Saklı yordam, dönen veya geçen ve istemci uygulaması aracılığıyla gerekli değişkenleri ayarlayan oldukça ciddi bir yazılım parçasıdır. Saklı yordam sunucunun kendisinde yürütüldüğünden, sunucu ile istemci uygulaması arasında (bazı hesaplamalar için) büyük miktarda veri alışverişi önlenebilir. Bu, elbette sahiplerinin eline geçen SQL sunucularındaki yükü azaltmaya izin verir. T SQL saklı yordamları alt türlerden biridir, ancak etkileyici veritabanları oluşturmakla uğraşanlar için çalışmaları gereklidir. Ayrıca, saklı yordamları incelerken faydalı olabilecek çok sayıda, hatta çok sayıda nüans vardır, ancak bu, profesyonel olanlar da dahil olmak üzere programlamayı yakından ele almayı planlayanlar için daha fazla gereklidir.

Son güncelleme: 08/14/2017

Çoğu zaman, bir veri işlemi, belirli bir sırayla yürütülmesi gereken bir dizi talimattır. Örneğin, bir satın alma kalemi eklerken, sipariş tablosuna veri girmeniz gerekir. Ancak bundan önce satın alınan ürünün stokta olup olmadığını kontrol etmeniz gerekir. Bu durumda, bir dizi ek koşulu kontrol etmeniz gerekebilir. Yani aslında bir ürünü satın alma süreci, belirli bir sırayla gerçekleştirilmesi gereken birkaç eylemi kapsar. Ve bu durumda, tüm bu eylemleri tek bir nesneye yerleştirmek daha uygun olacaktır - saklı yordam(saklı yordam).

Yani, özünde saklı yordamlar, bir bütün olarak yürütülen bir dizi talimattır. Böylece, saklı yordamlar, karmaşık işlemleri basitleştirmeyi ve bunları tek bir nesneye koymayı mümkün kılar. Mal satın alma süreci değişecek, buna göre prosedür kodunu değiştirmek yeterli olacaktır. Yani prosedür aynı zamanda kodu yönetmeyi de kolaylaştırır.

Saklı yordamlar ayrıca tablolardaki verilere erişimi kısıtlamanıza ve böylece bu verilerle ilgili olarak kasıtlı veya bilinçsiz istenmeyen eylemlerin olasılığını azaltmanıza olanak tanır.

Bir diğer önemli husus ise performanstır. Saklı yordamlar genellikle normal SQL ifadelerinden daha hızlı çalışır. Bunun nedeni, yordam kodunun ilk çalıştırıldığında derlenmesi ve daha sonra derlenmiş biçimde kaydedilmesidir.

CREATE PROCEDURE veya CREATE PROC komutu, saklı bir prosedür oluşturmak için kullanılır.

Yani saklı yordam üç ana Özellikler: kod basitleştirme, güvenlik ve performans.

Örneğin, veritabanında ürün verilerini depolayan bir tablo olduğunu varsayalım:

CREATE TABLE Ürünler (Id INT KİMLİK BİRİNCİL ANAHTAR, ÜrünAdı NVARCHAR (30) NULL DEĞİL, Üretici NVARCHAR (20) NULL DEĞİL, ProductCount INT DEFAULT 0, Fiyat PARA BOŞ DEĞİL);

Bu tablodan veri almak için saklı bir prosedür oluşturalım:

ürünleri kullanındb; GO PROSEDÜR OLUŞTURUN Ürün Özeti OLARAK Ürün Adını SEÇ Ürün, Üretici, Ürünlerden Fiyat

CREATE PROCEDURE komutunun ayrı bir pakette çağrılması gerektiğinden, yeni bir paket tanımlamak için mevcut veritabanını kuran USE komutundan sonra GO komutu kullanılır.

Prosedür adının ardından AS anahtar sözcüğü gelmelidir.

Prosedürün gövdesini betiğin geri kalanından ayırmak için, prosedür kodu genellikle bir BEGIN ... END bloğuna yerleştirilir:

ürünleri kullanındb; GİT PROSEDÜR OLUŞTURMA Ürün Özeti BAŞLANGIÇ OLARAK ÜrünAdı SEÇ Ürün, Üretici, Ürünler SONUNDAN FİYAT;

Prosedürü ekledikten sonra, alt düğümde SQL Server Management Studio'daki veritabanı düğümünde görebiliriz. Programlanabilirlik -> Saklı Yordamlar:

Ve görsel arayüz üzerinden de prosedürü kontrol edebileceğiz.

Prosedür yürütme

Saklı yordamı yürütmek için EXEC veya EXECUTE komutu çağrılır:

EXEC Ürün Özeti

Bir prosedürün kaldırılması

Bir prosedürü kaldırmak için DROP PROCEDURE komutunu kullanın:

BIRAKMA PROSEDÜRÜ Ürün Özeti