12. marts 2007 - 15:29Der er
8 kommentarer og 1 løsning
Konvertering af MSSQL query til Dataset query
Hej alle eksperter. Jeg har lavet en query i SQL Server Management Studio, som jeg skal bruge i et dataset på en hjemmeside. Hvordan gør jeg det, da det så vidt jeg ved ikke er muligt at "declare" i et dataset.
min query ser således ud:
declare @dato smalldatetime set @dato = '20-03-2007'
declare @periode int set @periode = 1 declare @bk int
set @bk = (SELECT count(*) FROM dbo.Booking RIGHT OUTER JOIN dbo.BaneInterval ON dbo.Booking.baneintervalID = dbo.BaneInterval.baneintervalID LEFT OUTER JOIN dbo.Banepulje ON dbo.Booking.BaneID = dbo.Banepulje.BaneID WHERE (dbo.Booking.spilleDato = convert(datetime, @dato ,105)) and (dbo.Booking.baneintervalID = @periode)) print @bk
if @bk = 0 select * from dbo.Banepulje
else if @bk = 1 (select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse from dbo.Booking, dbo.Banepulje where (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and (dbo.Booking.baneintervalID = @periode) and (dbo.Banepulje.BaneID != dbo.Booking.BaneID)) else if @bk = 2 (select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse from dbo.Booking, dbo.Banepulje where (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and (dbo.Booking.baneintervalID = @periode) and (dbo.Banepulje.BaneID != dbo.Booking.BaneID))
else if @bk = 3 (select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse from dbo.Booking, dbo.Banepulje where (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and (dbo.Booking.baneintervalID = @periode) and (dbo.Banepulje.BaneID != dbo.Booking.BaneID)) else print 'hej'
hvis du bare skal have et resultat tilbage så lav den om til en stored procedure.. så kan du kalde den normalt med lidt c# parametre og få et resultat tilbage.
Du kan mindske din sql til: declare @dato smalldatetime set @dato = '20-03-2007'
declare @periode int set @periode = 1 declare @bk int
set @bk = (SELECT count(*) FROM dbo.Booking RIGHT OUTER JOIN dbo.BaneInterval ON dbo.Booking.baneintervalID = dbo.BaneInterval.baneintervalID LEFT OUTER JOIN dbo.Banepulje ON dbo.Booking.BaneID = dbo.Banepulje.BaneID WHERE (dbo.Booking.spilleDato = convert(datetime, @dato ,105)) and (dbo.Booking.baneintervalID = @periode)) print @bk
if @bk = 0 select * from dbo.Banepulje
else if @bk BETWEEN 1 AND 3 (select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse from dbo.Booking, dbo.Banepulje where (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and (dbo.Booking.baneintervalID = @periode) and (dbo.Banepulje.BaneID != dbo.Booking.BaneID)) else print 'hej'
først og fremmest tak for svaret. Jeg er dog ikke helt sikker på hvad du mener med dit spørgsmål, hvis du kunne omskrive det ville det være dejligt. Jeg skal bruge den til at spørge i databasen hvor efter jeg så vil bruge det jeg får ud.
i dit tilfælde vil den se ud på denne måde: Create procedure dbo.getBaneInfo @dato smalldatetime, @periode int AS BEGIN declare @bk int
set @bk = (SELECT count(*) FROM dbo.Booking RIGHT OUTER JOIN dbo.BaneInterval ON dbo.Booking.baneintervalID = dbo.BaneInterval.baneintervalID LEFT OUTER JOIN dbo.Banepulje ON dbo.Booking.BaneID = dbo.Banepulje.BaneID WHERE (dbo.Booking.spilleDato = convert(datetime, @dato ,105)) and (dbo.Booking.baneintervalID = @periode)) print @bk
if @bk = 0 select * from dbo.Banepulje
else if @bk BETWEEN 1 AND 3 (select dbo.Banepulje.BaneID,dbo.Banepulje.Beskrivelse from dbo.Booking, dbo.Banepulje where (dbo.Booking.spilleDato = convert(datetime, @dato ,105) ) and (dbo.Booking.baneintervalID = @periode) and (dbo.Banepulje.BaneID != dbo.Booking.BaneID)) else print 'hej' END
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.