|
| Spørgsmål til IN funktionen i MS-SQL Fra : ///JJ |
Dato : 06-09-04 13:02 |
|
Jeg har en tabel med et felt der hedder "Konto" af typen Int.
Til min opgave har jeg lavet en SP der indeholder:
create stored procedure spTest
@X varchar(500)
as
select * from TabelA
where Konto IN (@X)
Det er mit ønske at X er min parameter til SP'en, men i form af en streng
(!), fordi den skal kunne indeholde fx:
spTest '100, 200, 300'
Dette kan SQL ikke lide - den melder konverteringsfejl på X (varchar til
int).
Jeg har fundet ud af at lave mit select statement om til ren streng og køre
det med EXEC kommandoen, men det er langt fra optimalt for videreudvikling
og det er svært at finde fejl i:
create stored procedure spTest
@X varchar(500)
as
declare @tmp varhcar(1000)
set @tmp='select * from TabelA where Konto IN (' + @X + ')'
exec (@tmp)
Det virker, men det betyder også at jeg efterfølgende ikke kan fortsætte med
kode i min SP... fx lave en ny select osv.
Mit problem: Er der en måde hvorpå man kan få den til at æde en streng til
IN funktionen når det der sammenlignes på er en Int?
Jeg har også prøvet denne variation, som bliver accepteret, men den giver
aldrig noget tilbage:
create stored procedure spTest
@X varchar(500)
as
select * from TabelA
where convert(varchar(3), Konto) IN (@X)
Nogen idéer?
Takker for al hjælp.
--
Mvh
///JJ
| |
Kristian Damm Jensen (07-09-2004)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 07-09-04 09:41 |
|
"///JJ" <nospam@tdcadsl.dk> wrote in message news:<413c51cb$0$159$edfadb0f@dtext01.news.tele.dk>...
> Jeg har en tabel med et felt der hedder "Konto" af typen Int.
>
> Til min opgave har jeg lavet en SP der indeholder:
>
> create stored procedure spTest
> @X varchar(500)
> as
> select * from TabelA
> where Konto IN (@X)
>
> Det er mit ønske at X er min parameter til SP'en, men i form af en streng
> (!), fordi den skal kunne indeholde fx:
>
> spTest '100, 200, 300'
>
> Dette kan SQL ikke lide - den melder konverteringsfejl på X (varchar til
> int).
>
> Jeg har fundet ud af at lave mit select statement om til ren streng og køre
> det med EXEC kommandoen, men det er langt fra optimalt for videreudvikling
> og det er svært at finde fejl i:
>
> create stored procedure spTest
> @X varchar(500)
> as
> declare @tmp varhcar(1000)
> set @tmp='select * from TabelA where Konto IN (' + @X + ')'
> exec (@tmp)
Dette er måden at gøre det.
> Det virker, men det betyder også at jeg efterfølgende ikke kan fortsætte med
> kode i min SP... fx lave en ny select osv.
Hvad mener du? Hvad er det du gerne vil, som du ikke kan?
> Mit problem: Er der en måde hvorpå man kan få den til at æde en streng til
> IN funktionen når det der sammenlignes på er en Int?
Ja, den du har præsenteret ovenfor.
Alternativt klipper du strengen i stykker og propper de enkelte bidder
ind i en temporær tabel.
> Jeg har også prøvet denne variation, som bliver accepteret, men den giver
> aldrig noget tilbage:
>
> create stored procedure spTest
> @X varchar(500)
> as
> select * from TabelA
> where convert(varchar(3), Konto) IN (@X)
Selvfølgelig ikke. Mængden på højre side indeholder ét element,
'100, 200, 300'. En streng på tre bogstaver kan aldrig blive lig
dette.
VH
Kristian
| |
///JJ (07-09-2004)
| Kommentar Fra : ///JJ |
Dato : 07-09-04 15:35 |
|
Kristian Damm Jensen wrote:
> "///JJ" <nospam@tdcadsl.dk> wrote in message
> news:<413c51cb$0$159$edfadb0f@dtext01.news.tele.dk>...
>> Jeg har fundet ud af at lave mit select statement om til ren streng
>> og køre det med EXEC kommandoen, men det er langt fra optimalt for
>> videreudvikling og det er svært at finde fejl i:
>>
>> create stored procedure spTest
>> @X varchar(500)
>> as
>> declare @tmp varhcar(1000)
>> set @tmp='select * from TabelA where Konto IN (' + @X + ')'
>> exec (@tmp)
>
> Dette er måden at gøre det.
>
>> Det virker, men det betyder også at jeg efterfølgende ikke kan
>> fortsætte med kode i min SP... fx lave en ny select osv.
>
> Hvad mener du? Hvad er det du gerne vil, som du ikke kan?
>
Skrive mere kode - konkret vil jeg select'e det fra exec'en sammen med noget
andet (oprindeligt havde jeg to select's som jeg til slut selectede
resultaterne fra. Men, hvis det at bruge streng+exec er måden, så må jeg jo
bygge den komplet i streng inden jeg exec'er.
>> Jeg har også prøvet denne variation, som bliver accepteret, men den
>> giver aldrig noget tilbage:
>>
>> create stored procedure spTest
>> @X varchar(500)
>> as
>> select * from TabelA
>> where convert(varchar(3), Konto) IN (@X)
>
> Selvfølgelig ikke. Mængden på højre side indeholder ét element,
> '100, 200, 300'. En streng på tre bogstaver kan aldrig blive lig
> dette.
Naturligvis - jeg blandende den med en lignende metode fra VB: INSTR
--
Mvh
///JJ
| |
|
|