Sqlserver: Stored procedures,valgfrie parametre og subquery i select-setning

No comments
Valgfrie parametre i en Stored procedure:

Her defineres to valgfrie parametre.
De blir valgfrie fordi de har fått satt en defaultverdi - Null i dette tilfellet:

@dato datetime = NULL,
@leverandorid int = NULL

deretter blir @dato satt til dagens dato hvis den er null,
dvs hvis ikke @dato ble sendt inn som parameter (evt ble sendt inn med verdi null):

BEGIN
IF @dato IS NULL SET @dato= getdate();

@LeverandorID kan ikke løses på samme måten. Dersom den er tom dvs null kan vi ikke sette denne til en spesiell verdi for å returnere alle poster.
Å velge WHERE @LeverandorID = null fører IKKE til rett resultat.
I stedet bruker vi en OR setning som vil returnere true hvis @LeverandorID = null, nemlig:

WHERE
(dbo.Produkter.LeverandorID = @LeverandorId OR @LeverandorID is null)


Subquery/Select i select:

I enkelte tilfeller fører ikke en vanlig join av tabeller frem.
Under er et eksempel som kjører en subquery for å finne den nyeste prisen fra en relatert tabell med mange priser.
Husk paranteser rundt subqueryen og gi den et navn vha as:

Select …, dbo.ProduktTyper.Kortnavn, (select TOP(1)KraftPris from dbo.PrisVarsler Where ProduktID=dbo.Produkter.ProduktID AND GjelderFraDato<=@dato ORDER BY GjelderFraDato) as GjeldendePris
FROM dbo.Produkter ….


Dato fra sqlserver til PHP:

Hvordan konvertere en dato fra Sqlserver for bruk i PHP:
CONVERT(varchar, dbo.Produkter.Opprettet, 104) + ' ' + SUBSTRING(CONVERT(varchar, dbo.Produkter.Opprettet, 108), 1, 5) AS Opprettet,



Full listing av Stored procedure:


CREATE PROCEDURE [dbo].[sp_Produktlisting]

@dato datetime = NULL,
@leverandorid int = NULL
AS

BEGIN

IF @dato IS NULL SET @dato= getdate();

SELECT TOP (100) PERCENT dbo.Produkter.ProduktID , dbo.Produkter.LeverandorID, dbo.Produkter.Navn,
dbo.Produkter.Betalingsinformasjon,dbo.Produkter.KravOmEpostFaktura, dbo.Produkter.KravOmEfaktura,
dbo.Produkter.KravOmAvtalegiro, dbo.Produkter.Landsdekkende,

CONVERT(varchar, dbo.Produkter.Opprettet, 104) + ' ' + SUBSTRING(CONVERT(varchar,dbo.Produkter.Opprettet, 108), 1, 5) AS Opprettet,
dbo.Produkter.Inaktiv, CONVERT(varchar, dbo.Produkter.Oppdatert, 104) AS Oppdatert, dbo.Terminer.Termin, dbo.ProduktTyper.ProduktType,dbo.ProduktTyper.Kortnavn,

(select TOP(1)KraftPris from dbo.PrisVarsler Where ProduktID=dbo.Produkter.ProduktID AND GjelderFraDato<=@dato ORDER BY GjelderFraDato) as GjeldendePris

FROM dbo.Produkter INNER JOIN

dbo.ProduktTyper ON dbo.Produkter.ProduktTypeID = dbo.ProduktTyper.ProduktTypeID INNER JOIN
dbo.Terminer ON dbo.Produkter.TerminID = dbo.Terminer.TerminID
WHERE (dbo.Produkter.LeverandorID = @LeverandorId OR @LeverandorID is null)
ORDER BY dbo.Produkter.LeverandorID, dbo.ProduktTyper.Kortnavn



No comments :

Post a Comment