2016-04-06 11 views
0

Seçme, gruplama, sipariş verme ve IN deyimlerini kullanan tümceler dahil olmak üzere hemen hemen her şeyin dinamik olacağı bir sql prosedürü yazıyorum. Kod yeniden kullanım, okunabilirlik ve bakım açısından, bir sql sorgusunu bir dize olarak geçirip yürütmek çok anlamlıdır. Şu anda prosedürümü yazıyorum, böylece tüm ilgili veriler bir statik sorguda birleştirilip biçimlendirildikten sonra bir tablo değişkenine eklenir. Daha sonra tablo değişkenine karşı yürütülecek sql sorgularında geçmek istiyorum.İzinleri prosedür bazında sınırlamak mümkün mü?

Bu, büyük bir yolla sql enjeksiyonuna kadar açılır. Geçirdiğim birçok parametre türünün her biri için tablo değeri parametreleri oluşturabilirdim ama bunu yapmak istemiyorum. Prosedürü, prosedür seviyesinde, sadece izin vermek istediğim şeyleri yapmak mümkün olacak şekilde sanallaştırmayı gerçekten çok isterdim; Örneğin, belirli tablolardan seçim yapın, ancak izinler ya da bunun gibi komik bir şey vermeyin. Bu yapılabilir mi?

+8

* Kod yeniden kullanımı, okunabilirliği ve bakımı açısından, bir sql sorgusunu bir dize olarak geçirip yürütmek çok mantıklı. * ** Kesinlikle katılmıyorum. ** –

+1

Bu bağlantıları okuyarak başlayın: http://www.sommarskog.se/dyn-search.html ve http://www.sommarskog.se/dynamic_sql.html – HLGEM

+0

Çok fazla "bakım kâbusu", "her şeyi yapmak" için genelleştirilen saklı bir yordamdan daha yüksek ses çıkarır. –

cevap

0

Elbette bu yapılabilir. Bu basit bir programlama meselesi. Kuralları tablolarda tutmak ve kural tablolarını sorgulamak için saklı yordamınızda mantık yazmanız ve kuralları uygulamanız gerekir.

Genel, dinamik saklı yordam kullanmıyorsanız SQL Server'ın sizin için ne yaptığını yapmak için özel kod yazmanız temelde size ait olacak, anıtsal bir iş olacaktır.

Bunu yapmam ama bunu durdurmana izin vermek zorunda değilsin.