Avatar billede simsen Mester
28. april 2008 - 15:07 Der er 1 løsning

COALESCE i stored procedure fungerer ikke

Hej,

Jeg har en søgning, hvor det er meningen, jeg vil have flere felter ind, hvor jeg aldrig ved på forhånd, hvilke felter, der er udfyldte.....Jeg har så herinde lært, jeg kan bruge COALESCE....MEN jeg kan bare ikke få den til at fungere....

Min procedure ser ud som følgende:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[GetActivitySearch]
    @fOurContactFId AS INT = null,
    @fCompanyFId AS INT = null,
    @fromDate AS DATETIME = null,
    @toDate AS DATETIME = null

AS
BEGIN
    SELECT      tActivity.fActivityPId, tActivity.fCompanyFId, tActivity.fContactFId, tActivity.fActivityDate, tActivity.fDimDetailCustomFId,
              tActivity.fActivityStatus, tActivity.fActivityNote, tActivity.fOurContactFId, tActivity.fOurContactF2Id, tActivity.fActivityTimeStamp,
              tCompany.fCompanyName, tDimDetail.fDimDetailText,
              tOurContact.fOurContactFirstName + ' ' + tOurContact.fOurContactLastName AS OurContactFullName



      FROM    tActivity LEFT OUTER JOIN
              tOurContact ON tActivity.fOurContactFId = tOurContact.fOurContactPId LEFT OUTER JOIN
              tDimDetail ON tActivity.fDimDetailCustomFId = tDimDetail.fDimDetailPId LEFT OUTER JOIN
              tCompany ON tActivity.fCompanyFId = tCompany.fCompanyPId

WHERE
(tActivity.fOurContactFId = COALESCE(@fOurContactFId,tActivity.fOurContactFId))
END

Hvis jeg ikke har WHERE delen på - får jeg samtlige 24 rækker, hvis jeg har WHERE delen på og ikke udfylder @fOurContactFId, får jeg kun 18 rækker ud.........De rækker, jeg ikke får ud, er de rækker hvor fOurContactFId = null i tabellen.......

Såvidt jeg har lært, skulle COALESCE jo netop tage alle rækker ud....også selvom de er null?

Jeg håber nogen kan hjælpe mig, jeg er sådan set lidt desperat :-)

mvh
simsen :-)
Avatar billede simsen Mester
28. april 2008 - 15:23 #1
Jeg tror faktisk, jeg selv har fundet en løsning :-)

I min WHERE sætning - skal jeg også spørge på om feltet er null:

((@fOurContactFId IS NULL) OR(tActivity.fOurContactFId = COALESCE(@fOurContactFId,tActivity.fOurContactFId)))
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