Avatar billede beco Nybegynder
02. september 2004 - 20:20 Der er 5 kommentarer

While løkker

Hej Eksperter

Jeg har lavet følgende løkke, men kan ikke få den til at virke :-((

declare @pris1 varchar(10)
declare @pris2 varchar(10)
declare @prisX varchar(10)
declare @int int

set @pris1 = 100
set @pris2 = 100
set @int = 1

while @int < 3
begin
  set @prisX = '@pris' + convert(char(1),@int)
  set @int = @int + 1
end


Formålet med løkken skulle være, at ved 1.gennemløb fik jeg fat i værdien af @pris1 og ved 2. gennemløb værdien af @pris2.

Er der nogle som kan hjælpe ?
Avatar billede ldanielsen Nybegynder
02. september 2004 - 20:56 #1
Prøv dette:

declare @pris1 int
declare @pris2 int
declare @prisX int
declare @int int

set @pris1 = 100
set @pris2 = 100
set @int = 1

while @int <= 2
begin
  set @prisX = exec('@pris' + convert(char(1),@int))
  set @int = @int + 1
end
Avatar billede ldanielsen Nybegynder
02. september 2004 - 21:03 #2
er ved at finde ud af det ...
Avatar billede ldanielsen Nybegynder
02. september 2004 - 21:16 #3
Det kan jeg ikke lige finde ud af, jeg skal vist til at se nærmere på T-SQL
Avatar billede venne Nybegynder
03. september 2004 - 13:49 #4
Det tror jeg altså ikke du får til at virke på den måde.
Det lyder som om du gerne vil simulere arrays i T-SQL. Det kan være du kan bruge en tabelvariabel i stedet:


DECLARE @pristabel TABLE (
  pris decimal(12,2)
)

DECLARE @prissum decimal(12,2)

INSERT INTO @pristabel(pris) VALUES (100)
INSERT INTO @pristabel(pris) VALUES (200)

SELECT @prissum = SUM(pris) FROM @pristabel


Her erklæres en variabel som en tabel. Denne variabel kan nu bruges som om det var en rigtig tabel i databasen. Og det er SQL Server som bekendt rigtig god til at håndtere, fx summeringen i eksemplet.
Man skal lige vænne sig til at lave en insert i stedet for at sætte en variabel, men det fungerer godt.
Avatar billede spideren Nybegynder
06. september 2004 - 08:23 #5
Enig det ligner mest arrays

Men da det er en WHILE løkke der skal bruges må det hedde

DECLARE @priser TABLE (id INT, amount VARCHAR(10))
DECLARE @result VARCHAR(10)
DECLARE @int int  SET @int = 1

INSERT INTO @priser (id, amount) VALUES (1, 1000)
INSERT INTO @priser (id, amount) VALUES (2, 2000)
INSERT INTO @priser (id, amount) VALUES (3, 3000)
INSERT INTO @priser (id, amount) VALUES (4, 4000)

WHILE @int < 3
BEGIN
  SELECT @result = amount FROM priser (NOLOCK) WHERE id = @int
END

Herefter har du noget nær et array, og resultatet fra hver loop i @result

Håber dette er det rette
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