[MSSQL] Welk datatype voor WHERE IN select query

Pagina: 1
Acties:

  • Tommel
  • Registratie: November 2000
  • Niet online
Heb de volgende Stored Procedure:
code:
1
2
3
4
5
6
CREATE PROCEDURE usp_sel_artikelen_gerelateerd
(
    @ArtikelNummers varchar(1000)
) AS

SELECT * FROM Artikelen WHERE Artikelnummer IN (@ArtikelNummers)

Roep ik de SP nu aan met
code:
1
usp_sel_artikelen_gerelateerd [1000,1031,3211,1121,3232]

dan werkt dit niet omdat hij bij where IN een INT verwacht, ik krijg de volgende foutmelding:
code:
1
2
Server: Msg 245, Level 16, State 1, Procedure usp_sel_artikelen_gerelateerd, Line 7
Syntax error converting the varchar value '92038,87270,80305,68305,26308' to a column of data type int.

Maak ik van de
code:
1
@ArtikelNummers varchar(1000)

b.v.
code:
1
@ArtikelNummers int

dan gaat de aanroep natuurlijk niet goed omdat ik een "string" meegeef.
Iemand enig idee om dit te doen zonder een dynamische query te gebruiken?

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Je zal die komma separated string moeten opbouwen, als string doorgeven, en dan je SQL Statement mbhv string concatenation opbouwen, en uitvoeren met sp_executesql.

Dit is één van de dingen die je niet mhbv parameters kan doen.

Je zal het dus zo moeten doen:
SQL:
1
2
3
4
5
declare @sql VARCHAR(500)

select @sql = 'SELECT * FROM Artikelen WHERE ArtikelNr IN (' + @ArtikelNummers + ')'

sp_executesql @sql


AFAIK kan je daar niet van onderuit.

[ Voor 4% gewijzigd door een moderator op 09-11-2006 14:59 ]

https://fgheysels.github.io/


  • Tommel
  • Registratie: November 2000
  • Niet online
Ok, bedankt voor reactie. Dan zit er dus maar één manier op.

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

Hoe kom je eigenlijk aan die getallen? Dynamisch een SQL opbouwen kan natuurlijk, maar als er een mogelijkheid om dat te omzeilen is dat mooier.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

whoami schreef op donderdag 09 november 2006 @ 14:56:
AFAIK kan je daar niet van onderuit.
Het kán wel zonder dynamic sql: http://www.sqlteam.com/item.asp?ItemID=11499
Maar het blijft niet optimaal (je zit sowieso aan de limiet van een varchar).

[ Voor 15% gewijzigd door Annie op 10-11-2006 00:29 ]

Today's subliminal thought is: