anyone knows kind of trick
create procedure [pr_getfindoc] @id uniqueidentifier null begin select f.* [dbo].[findocument] f --id column primary key @id null or f.id = @id end so, procedure above returns either single findoc or findocs. depends on whether id sent or not.
just single query.
so need tvp parameter.
it's tvp parameter - array of uniqueidentifier values
create type [dbo].[guidlist] table( [id] [uniqueidentifier] not null, primary key clustered ( [id] asc )with (ignore_dup_key = off) ) and stored procedure:
create procedure [pr_getfindoc] @id_list [dbo].[guidlist] readonly begin if exists (select 1 @id_list) begin select f.* @id_list filter inner join [dbo].[findocument] f on f.id = filter.id end else begin select f.* [dbo].[findocument] f end end is there way change code of sp tvp input parameter single query ?
you can use in instead. gives flexibility use more complex logic:
select f.* findocument f f.id in (select id @id_list) or not exists (select 1 @id_list); note these methods (and yours) not efficient. if logic probably compile using index on id. if queries complex, better either force re-compile or use dynamic sql (and force re-compile) because of sql server compiles queries first time stored procedure invoked. , query plan may not optimal parameter choices.
Comments
Post a Comment