Sqlserver: Stored procedures,valgfrie parametre og subquery i select-setning
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
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment