SQL - anvendelse af variabler
HejJeg har en SQL kode, hvor jeg dagligt har behov for at ændre nogle søgekriterier. I stedet for at ændre 3 datofelter mange gange har jeg forsøgt at erklære en variabel per datofelt. Jeg får dog fejl på query og er nu tvivl om syntaksen?
Jeg har indsat koden nedenunder, hvor jeg definerer 3 variabler @ValuationT, @EndT and @BegT. Jeg har forsøgt med forskellige variable typer, men ingen virker umiddelbart. Planen var at lave flere join select statements der skal anvende værdierne for de 3 variabler. Kan det lade sig gøre? Skal man skrive noget specielt hvor man sætter variablen ind?
use AllegroMRTesting
GO
Declare @ValuationT timestamp;
Set @ValuationT = '2011-05-12 23:00:00.000'
Declare @BegT timestamp;
Set @BegT = '2011-05-01 00:00:00.000'
Declare @EndT timestamp;
Set @EndT = '2015-10-01 00:00:00.000'
GO
SELECT
valuationdetail.tradebook tradebook,
valuationdetail.tradetype tradetype,
valuationdetail.pricestatus pricestatus,
valuationdetail.unit unit,
valuationdetail.priceindex priceindex,
valuationdetail.begtime begtime,
product.producttype producttype,
sum(valuationdetail.exposurequantity) as exp
--sum(valuationdetail.exposurequantity) as exp where unit = 'mt')
--(sum(valuationdetail.exposurequantity / 6.35)) as exp where unit = 'mt')
FROM valuation, valuationdetail, position, finposition, product
WHERE valuation.valuationmode = 'Position' and valuation.valuation=valuationdetail.valuation
and valuationdetail.position=finposition.position and valuationdetail.posdetail=finposition.posdetail and valuationdetail.product = product.product
and valuationdetail.position = position.position and valuationdetail.quantitytype <> 'LOSS'
and ( (valuation.valuationtype = 'SUMMATION'
and valuation.valuationtime = @ValuationT ) or (valuation.valuationtype = 'INCREMENTAL'
and valuation.valuationtime >= @ValuationT and valuation.valuationtime <= @ValuationT) )
and position.trade is not null AND ((valuationdetail.begtime< @EndT OR valuationdetail.begtime is null)
AND (valuationdetail.endtime> @BegT OR valuationdetail.endtime is null))
AND ( valuationdetail.exposure = 'MARKET'