मुझे बड़ी select
क्वेरी करने के लिए SQL Server 2008 के लिए संग्रहीत प्रक्रिया लिखने की आवश्यकता है और मुझे प्रक्रिया के पैरामीटर के माध्यम से फ़िल्टरिंग प्रकार निर्दिष्ट करने के साथ परिणामों को फ़िल्टर करने की आवश्यकता है। मुझे इस तरह के कुछ समाधान मिले:WHERE खंड पर पैरामीट्रिज?
create table Foo(
id bigint, code char, name nvarchar(max))
go
insert into Foo values
(1,'a','aaa'),
(2,'b','bbb'),
(3,'c','ccc')
go
create procedure Bar
@FilterType nvarchar(max),
@FilterValue nvarchar(max) as
begin
select * from Foo as f
where case @FilterType
when 'by_id' then f.id
when 'by_code' then f.code
when 'by_name' then f.name end
=
case @FilterType
when 'by_id' then cast(@FilterValue as bigint)
when 'by_code' then cast(@FilterValue as char)
when 'by_name' then @FilterValue end
end
go
exec Bar 'by_id', '1';
exec Bar 'by_code', 'b';
exec Bar 'by_name', 'ccc';
मुझे लगता है कि यह दृष्टिकोण काम नहीं करता है। सभी कॉलम को nvarchar(max)
पर डालना संभव है और उन्हें तारों के रूप में तुलना करें, लेकिन मुझे लगता है कि यह प्रदर्शन में गिरावट का कारण बन जाएगा।
क्या जैसी संरचनाओं का उपयोग किये बिना संग्रहीत प्रक्रिया में where
खंड को पैरामीट्रिज़ करना संभव है?
क्या आपने LINQ से SQL की कोशिश की है? –