sql server 2008 - Passing preference type parameters to a stored procedure - best practice? -
i need provide solution problem of passing multiple parameters series of reporting stored procedures in sql server 2008. parameters going user preferences , may consist of lists user has selected more 1 type of value (e.g. multiple months). there may many 30 different parameters , maybe 60% of them contain multiple selections.
so far have 3 options.
pass in values normal parameters set interface - seems fail quite need pass collections (multiple months example).
pass in parameters single xml fragment. method used here although i'm not sure if can cope multiple elements of same type (e.g. in months above). code uses dynafilter parse xml - i've never heard of , can't find reference on internet. developer wrote code tomorrow i'll have more info then.
use table value parameters - i'm beginning @ these promising , seem offer performance.
we're using sql server 2008 asp.net mvc front end. move 2012 if needed.
i've started , continue more research on best way deal problem value opinions on best way forward , if there other options available.
thanks in advance.
here's how can table-valued parameters. these introduced sql 2008, version fine solution, if choose go route. in test scenario i'm making primary table , related table foreign key pointing primary.
first, create table datatypes:
create type primary_tbltype table (personkey int not null primary key, firstname varchar(30), lastname varchar(30)) create type related_tbltype table (fk_personkey int not null, accountnum varchar(30), accountbalance money) create stored procedure:
create procedure mysproc @primarytable primary_tbltype readonly, @relatedtable related_tbltype readonly begin declare @currentkey int declare @firstname varchar(30) declare @lastname varchar(30) declare @accounttotal money declare personcursor cursor local fast_forward select personkey, firstname, lastname @primarytable open personcursor fetch next personcursor @currentkey, @firstname, @lastname while @@fetch_status= 0 begin select @accounttotal = sum(accountbalance) @relatedtable fk_personkey = @currentkey print @firstname + ' ' + @lastname + ' - account total: ' + convert(varchar(30), @accounttotal) fetch next personcursor @currentkey, @firstname, @lastname end end; and here's test data try out:
declare @primarytvp primary_tbltype declare @relatedtvp related_tbltype insert @primarytvp values (1, 'john', 'cleese') insert @primarytvp values (2, 'eric', 'idle') insert @primarytvp values (3, 'graham', 'chapman') insert @relatedtvp values (1, '29310918', 28934.33) insert @relatedtvp values (2, '123123', 3418.11) insert @relatedtvp values (2, '33333', 666.66) insert @relatedtvp values (3, '554433', 22.22) insert @relatedtvp values (3, '239482', 151515.15) exec mysproc @primarytvp, @relatedtvp; some of advantages of using tvps covered here, , capable of participating in set-based operations.
Comments
Post a Comment