Avatar billede Slettet bruger
15. januar 2010 - 13:01 Der er 1 kommentar og
1 løsning

Stored procedure med if og union

Jeg har en stored procedure med nogle parametre der afgør hvad jeg gerne vil have med, men jeg kan ikke rigtig få det til at arbejde sammen med en union. Er der nogen der har nogen forslag. Det jeg prøver er nogenlunde sådan her:

select blabla fra table where thisgoes

if(thisalsogoes)
begin
union
select blabla fra table where thisalsogoes
end

if(morethingsgo)
begin
union
select blabla fra table where morethingsgo
end

Er der nogen der kan hjælpe mig. Jeg har tre parametre der kan trigge ekstra indhold til selectens union. Håber at der er nogen der kan give et svar.

Weinreich
Avatar billede janus_007 Nybegynder
15. januar 2010 - 17:49 #1
Stored Procedures bør absolut ikke anvendes sådan! Man skal under ingen omstændigheder opbygge en sql udfra hvilke parametrer der er med eller ej.

Det var moralprædiken :)

Men men... T-SQL kan ikke opbygges sådan i sekvenser i den eksekveres set-based, dvs. måden du kan løse det på er ved at gentage udtrykket, altså:

if(thisalsogoes and morethingsgo is null)
begin
select blabla fra table where thisalsogoes
end

if(thisalsogoes and morethingsgo)
begin
select blabla fra table where thisalsogoes
union
select blabla fra table where morethingsgo
end

Eller du kan smide det ind i et temporært table, sådan her:

select top 0 blabla into myTmpTable fra table

if(thisalsogoes)
begin
insert into #myTmpTable
select blabla fra table where thisalsogoes
end

if(morethingsgo)
begin
insert into #myTmpTable
select blabla fra table where morethingsgo
end

Eller du kan skrive det i dynamisk SQL (absolut No-GO hehe)
declare @sql varchar(max)
set @sql = 'select blabla...'
og bygge en string op på dine if's

og til sidst
exec(@sql)

Men jeg er sikker på vi måske kan komme frem med en bedre løsning hvis du er mere præcis i hvad du har af input og forventer af output :)
Avatar billede Slettet bruger
20. januar 2010 - 15:12 #2
Tak for dine kommentarer. Jeg prøver at finde en eller anden vej uden om :D

Jeg tror det bliver noget med at lave et par opkald hvis de givne kriterier er opfyldt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester