/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
WHERE id IN....
Fra : Kasper Kamp Simonsen


Dato : 23-10-02 12:09

Hej NG,

I en stored procedure får jeg følgende fejl

Syntax error converting the varchar value '114, 747, 454, 1756' to a column
of data type int.

Når jeg prøver at gøre følgende.

SELECT id FROM <tabel> WHERE (id IN ('' + @idListe))

@idListe er en varchar()

Jeg har prøvet at lave en cast på idListe, men så får jeg samme fejl.

Nogen som har et bud på hvordan jeg løser det?

/Kasper



 
 
Jens Gyldenkærne Cla~ (23-10-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-10-02 12:23

Kasper Kamp Simonsen skrev:

> SELECT id FROM <tabel> WHERE (id IN ('' + @idListe))
>
> @idListe er en varchar()

Prøv med

EXEC 'SELECT id FROM <tabel> WHERE id IN (' + @idListe + ')'

Overvej i øvrigt at bruge EXISTS i stedet for IN - det skulle give
bedre performance.


--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Nis Jørgensen (24-10-2002)
Kommentar
Fra : Nis Jørgensen


Dato : 24-10-02 10:42

On Wed, 23 Oct 2002 13:22:52 +0200, "Jens Gyldenkærne Clausen"
<jens@gyros.invalid> wrote:

>
>Overvej i øvrigt at bruge EXISTS i stedet for IN - det skulle give
>bedre performance.

Overvej at bruge et RDBMS der selv udfører basale optimeringer af
SQL-sætninger.

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Jens Gyldenkærne Cla~ (24-10-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 24-10-02 11:48

Nis Jørgensen skrev:

>>Overvej i øvrigt at bruge EXISTS i stedet for IN - det skulle
>>give bedre performance.
>
> Overvej at bruge et RDBMS der selv udfører basale optimeringer
> af SQL-sætninger.

Gør MSSQL det? Hvilke systemer kan ellers klare det? Og er
udskiftning af IN med EXISTS en basal optimering?

--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Nis Jørgensen (24-10-2002)
Kommentar
Fra : Nis Jørgensen


Dato : 24-10-02 16:32

On Thu, 24 Oct 2002 12:48:05 +0200, "Jens Gyldenkærne Clausen"
<jens@gyros.invalid> wrote:

>Nis Jørgensen skrev:
>
>>>Overvej i øvrigt at bruge EXISTS i stedet for IN - det skulle
>>>give bedre performance.
>>
>> Overvej at bruge et RDBMS der selv udfører basale optimeringer
>> af SQL-sætninger.
>
>Gør MSSQL det?
>Hvilke systemer kan ellers klare det?


For at være præcis: Jeg mener ikke at et RDBMS skal "rette i"
SQL-sætninger - men at den skal lægge en fornuftig queryplan, der
udnytter basale transformeringer. Hvis derfor to udtryk er
ækvivalente, bør performance af dem ikke være væsentligt forskellig.

Jeg går ud fra at M$-SQL optimerer queries inden udførelse - og ikke
bare udfører dem som de er skrevet.

>Og er udskiftning af IN med EXISTS en basal optimering?

Det kommer an på om de er ækvivalente ... i det aktuelle tilfælde kan
jeg ikke lige se hvordan man skulle introducere en EXISTS.

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Kristian Damm Jensen (23-10-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 23-10-02 19:58

Kasper Kamp Simonsen wrote:
>
> Hej NG,
>
> I en stored procedure får jeg følgende fejl
>
> Syntax error converting the varchar value '114, 747, 454, 1756' to a column
> of data type int.
>
> Når jeg prøver at gøre følgende.
>
> SELECT id FROM <tabel> WHERE (id IN ('' + @idListe))
>
> @idListe er en varchar()
>
> Jeg har prøvet at lave en cast på idListe, men så får jeg samme fejl.
>
> Nogen som har et bud på hvordan jeg løser det?

Jens har svaret på, hvad du skal gøre.

Jeg vil gerne forklare, hvad der går galt.

Når du udfører din indholdet af din variabel indsat i stedet for
variablen. Det sql-fortolkeren forsøger at udføre er derfor:

SELECT id FROM <tabel> WHERE (id IN ('114, 747, 454, 1756')

Der er med andre ord et element i den liste, der er højreside i
IN-operationen, nemlig tekststrengen '114, 747, 454, 1756'. Med mindre
id er en tekststreng, så giver det naturligvis en typefejl.


--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste