Kaç saklı yordam parametresi çok fazla?


12

SQL Server 2008'de saklı bir yordam yazmaya başladım ve 30'dan fazla parametreye sahibim. Asla ~ 10'dan fazla parametreli bir tane yazmadım ve bu beni düşündürdü ... Hangi noktada çok fazla parametre var?

İçerik için ... Bu prosedür aslında olacaktır INSERT tek tabloya tek bir satır. Çok benzer olurdu; biraz daha küçük de olsa; Aynı tabloda bir GÜNCELLEME gerçekleştiren sürüm . Çoğu sütun, int ve dizelerin ( varchar(200)) bir karışımıyla nispeten küçüktür .

Sorunlar nelerdir; İyi ya da kötü; çok sayıda parametreye sahip bir prosedüre sahip olmak ve diğer modelleri düşünmeye başlamam gereken eşik nedir?


1
Tam olarak 'fiyat sormak zorunda kalırsanız, bunu göze alamaz' gibi. Kaç parametrenin çok fazla olduğunu merak etmeye başlarsanız, çok fazla parametreniz olur. Ana sorun motor değil, siz, kodun insan okuyucusu / koruyucusu. Bu yüzden otomatik olarak oluşturulan kodda olabildiğince çok sahip olmak için Tamam olduğunu söyleyebilirim , ancak el yazılı / bakımlı kod makul tutmak.
Remus Rusanu

Yanıtlar:


12

Sorunlar? Hiçbirini tartışmam.

  • Sınır 2100 parametredir . IIRC, SQL2000'den beri 2100 olmuştur, ancak bir belge hatası 1024 olduğunu ileri sürdü.
  • Bir tablonun 1000 sütunu varsa ( örneğin bir Sharepoint esque seyrek sütun düzenlemesi nedeniyle) ve saklı yordamlar yoluyla erişimi zorunluyorsanız, insert işleminizin 1000 parametresi olabilir. Bunda yanlış bir şey yok.
  • Geniş bir tabloyla karşılaştığınızda şemayı gözden geçirmek için duraklatın (30 özellikle geniş değildir). Hayatı normalleştirmeye başlayan tabloları bulmak nadir değildir, ancak tembellik ve / veya beceriksizlik sayesinde tanınmayacak kadar genişlemiştir.
  • Bir parametre kümesini CSV listesi veya XML olarak geçirmeyi bile kısaca düşünmeyin. Sorgu eniyileyiciyi kör eder ve çok az zaman veya çaba gerektirmez.
  • Çok sayıda parametreye sahip bir yordamı çağırmak için istemci kodunu elinizle krank etmeyin. T4 şablonları veya CodeSmith gibi kod oluşturma araçları kurtarmaya.

1
Bu cevap için teşekkürler, çok güzel ifade edildi. Bu sorumu mükemmel bir şekilde cevaplıyor. Onlar "gibi büyük Scrabble kelime kullanımı için bir kimlik kartım yok çok kötü zaafından "
JoeGeeky

2

Joe Celko, bu iki bölümlü makalede ayrıntılı olarak yazdığı uzun parametre listelerinin savunucusudur :

En basit yanıt, yordam gövdesi içinde listeler ve türetilmiş tablolar oluşturmak için uzun bir parametre listesi kullanmaktır. SQL sunucusu, pratik amaçlar için fazlasıyla yeterli olması gereken 2100 parametreye kadar işleyebilir. SQL Server aslında bu konuda bir wimp olduğunu; DB2; 32K parametrelerini iletebilir. ve Oracle'ın 64K parametresi olabilir.

... uzun parametre listesi düz eski parametrelerden oluşur, yani hem çıktılar hem de girişler için kullanılabilirler. Ayrıca, optimize edicinin kullanması için tek bir ifadede yer almaktadır.

Bu tekniklerin her zaman en iyi çözüm olacağını düşünüyor muyum? Tabii ki değil. SQL'de böyle bir şey yoktur. Ancak, uygun bir sorunla karşılaştığınızda bakmaya değer.

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.