SQL Server'da, saklı yordamları gruplamanın amacı nedir?


35

Başa çıkmak zorunda olduğum en şaşırtıcı konulardan biri de Kayıtlı İşlem gruplarıyla ilgili. Saklı bir prosedür verildiğinde, usp_DoSomethingAwesomebu işlemi başka bir grupta arayarak oluşturabilirim usp_DoSomethingAwesome;2.

Bunu, sistem tarafından üretilen bazı Çoğaltma saklı yordamları ile ortaya çıkaran bazı çoğaltma sorunlarını (Publisher: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.) Giderirken buldum.

Bu "gruplama" yeteneğinin ardındaki amaç / düşünce nedir?

Yanıtlar:


32

Bu bir yöntemi aşırı yüklemek gibi. Temelde, her biri farklı şeyler yapan, farklı sayıda parametre alan, farklı tablolarda çalışan, farklı çıktılara sahip vb. Saklı yordamınızın iki veya daha fazla sürümünü oluşturabilirsiniz.

Bunlara Numaralı Prosedürler adı verilir ve kesinlikle haklarından mahrum bırakılırlar ( 2005 yılından bu yana ilan edilirler ). Hala SQL Server 2012'de desteklenmektedir, ancak bazı özellikler onlarla iyi oynamıyor. Örneğin, İçeren Veritabanlarında bir içerik ihlali olarak kabul edilirler ve> 1 numaralı işlemler oluşturulmaz:

Mesaj 12829, Seviye 16, Durum 1, İşlem Notu, Satır 1
Saklı prosedür 'dbo.blat', bir grup numaralandırılmış prosedürü ifade eder. Numaralandırılmış saklı yordamlar içerilen veritabanlarında mevcut değildir. Lütfen İçindeki veritabanları hakkında daha fazla bilgi için Çevrimiçi Kitaplar konusuna İçeren Veritabanlarını Anlama konusuna bakın.


5

Saklı Prosedürleri gruplama yeteneği (kullanımdan kaldırılmış) tek bir (ve çok aptalca) bir amaç için var gibi gözüküyor: tek bir DROPifadeyle toplu silme yeteneği . Saklı yordam oluşturma için SQL Server 2000 MSDN belgelerine göre :

Gruplandırma
Prosedürlerin mantıksal olarak gruplandırılmasını sağlayan farklı bir kimlik numarası verilirse, mevcut saklı prosedürle aynı isimde bir prosedür oluşturulabilir. Aynı isimde gruplama prosedürleri aynı anda silinmelerini sağlar. Aynı başvuruda kullanılan prosedürler genellikle bu şekilde gruplandırılır. Örneğin, my_app uygulamasıyla kullanılan işlemler my_proc; 1, my_proc; 2 vb. Olarak adlandırılabilir. Silme my_proc tüm grubu siler. Prosedürler gruplandıktan sonra, grup içindeki bireysel prosedürler silinemez.

Aynı temel adının kullanılmasının aşırı yüklenmeye bile izin vermediği (imzaların benzersiz olması gerekmediği ve belirli bir "sayıya" otomatik olarak yönlendirilmesi gerekmediği) verilen bu yapıyı kullanmanın ek faydaları yoktur ve bu nedenle yine de yapmanız gerekir. yürütürken "sayı" kullanın. Bu yüzden "aptal" belirlenmesi (ve bu muhtemelen bu konuda çok güzel oluyor ;-).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.