Zapytanie SQL

0

Witam.
Nam procedurę której dostaje na wejściu string - ciąg kodów EAN które trafiają do zapytanie jako parametr

 select EAN, cena  from towary where EAN in  ('2010000009581','2010000009581','2010000010549','2010000010549')

I teraz pojawią się problem, jeżeli dany kod występuję w ciągu wejściowym dwa razy, select zwraca go tylko raz.

2010000009581 , 2.50
2010000010549, 3.45

A mi zależy aby w select zwrócił tyle pozycji ile dostał na wejściu.

2010000009581 , 2.50
2010000009581 , 2.50
2010000010549, 3.45
2010000010549, 3.45

Jakiś pomysł jak zmodyfikować zapytanie aby osiągnąć pożądany wynik.
Zawsze można odpytać bazę po jednym kodzie.

Pozdrawiam.

0

Wrzuć do tabeli tymczasowej (nie pamiętam, czy w procedurach można tworzyć tymczasowe) i połącz zamiast IN

0

Wrzuć EAN-y z ciągu wejściowego do tabelki tempowej a następnie JOIN-uj do tej tabelki i będziesz miał EAN powtórzony tyle razy ile jest w ciągu wejściowym.

0
Marcin.Miga napisał(a):

Wrzuć do tabeli tymczasowej (nie pamiętam, czy w procedurach można tworzyć tymczasowe) i połącz zamiast IN

Oczywiście, że można tworzyć tabele tymczasowe w procedurach. Oprócz tego w MSSQL są zmienne tablicowe.

Tabela tymczasowa:

CREATE TABLE #tab (ean varchar(10))

Zmienna tablicowa:

DECLARE @tab TABLE (ean varchar(10))
0

Przepraszam ale nie podałem całego kontekstu.

Powinienem dodać że ta procedura jest pisana w VS C#

Wskazane zapytanie trafia do SqlCommand, na podstawie którego tworze SqlDataReader.
Czy korzystanie w takim wypadku z tabeli lub tablicy tymczasowej ma sens.

0

Wymyśliłem coś takiego

select * from cdn.Towary twr,

(sELECT  * FROM (VALUES ('2010000009581'),('2010000009581'),('2010000010549'),('2010000010549') ) as x(A)) ean
where twr.Twr_EAN = ean.A 

1 użytkowników online, w tym zalogowanych: 0, gości: 1