15. januar 2010 - 13:01Der 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.
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 :)
Synes godt om
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.
Synes godt om
Ny brugerNybegynder
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.