Avatar billede bo_vesth Nybegynder
30. april 2003 - 19:18 Der er 4 kommentarer

Sammensætning af variabel navne

Jeg har forsøgt at sammensætte en variabel navn men uden held. Jeg kunne godt tænke mig at kunne loope gennem et "array" af variable.

Kode:
DECLARE @Count varchar
DECLARE @BatchId VarChar(50)
DECLARE @BatchId0 VarChar(15)
DECLARE @BatchId1 VarChar(15)
DECLARE @BatchId2 VarChar(15)
DECLARE @BatchId3 VarChar(15)

Set @Count = 0
Set @BatchId0 = 'Batch0'
Set @BatchId1 = 'Batch1'
Set @BatchId2 = 'Batch2'
Set @BatchId3 = 'Batch3'
While (@Count <= 3)
    Set @Count = @Count + 1   
        Set @BatchId = (SELECT '@BatchId' + @Count)
        SELECT Locked FROM tblBatchQ WHERE BatchId = @BatchId


Jeg får igen fejl, det virker "bare" ikke. Så vidt jeg kan indeholder var @BatchId - @Batchidx. SQL opfatter bare ikke @Batchidx som en variabel men så en alm. string.

Hvad gøre jeg forkert???
Avatar billede webfreelancer.dk Nybegynder
30. april 2003 - 19:45 #1
Prøvede lige denne her måde at bygge en SQL-streng op på, men det ser ud til at sp_executesql kører SQL'en i et lukket scope, således at den ikke kan se de variable du har defineret.

DECLARE @SQLString NVARCHAR(500)
SET @SQLString = N'SELECT Locked FROM tblBatchQ WHERE BatchID = @BatchID' + @Count
EXEC sp_executesql @SQLString

Kan du ikke lægge variablerne ind i en temporær tabel og derefter gennemløbe den med en cursor?

Hilsen
webfreelancer.dk
Avatar billede janus_007 Nybegynder
30. april 2003 - 21:46 #2
Prøv sådan her:
.
.
.
Set @Count = @Count + 1   
        Set @BatchId = (SELECT '@BatchId' + @Count)
EXEC('SELECT Locked FROM tblBatchQ WHERE BatchId = '+ @BatchId +'')

Jeg tror nu der er en smartere måde at løse dit problem på, hvad er det du gerne vil? - Måske man skulle angribe det fra en helt anden vinkel :O)
Avatar billede bo_vesth Nybegynder
02. maj 2003 - 08:37 #3
Hej Janus 007

Jeg har prøvet dit forslag men uden held. Jeg får følgende fejl.
"Must declare the variable '@BatchId1'". Jeg har lavet en "DECLARE @BatchId1 VarChar(15)"
Avatar billede janus_007 Nybegynder
02. maj 2003 - 09:20 #4
Højst tænkeligt fordi den skal deklareres i den dynamiske del.

.
.
.
DECLARE @SQL AS VARCHAR(500)
Set @Count = @Count + 1   
        Set @BatchId = (SELECT '@BatchId' + @Count)
SET @SQL = DECLARE @BatchId1 VarChar(15) '
SET @SQL = @SQL + 'SELECT Locked FROM tblBatchQ WHERE BatchId = '+ @BatchId +''

EXEC(@SQL)

Måske det virker... Men jeg er stadig nysgerrig efter at høre hvad det er du vil opnå :O)
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