Różne wartości w podzapytaniu

0

Witam społeczność,
Mam taką konstrukcję w podzapytaniu:

SELECT grt_Id FROM sl_GrupyTw WHERE grt_Nazwa IN (@groups)

Jak teraz skonstruować zmienną @groups, aby poprawnie zapytanie się wykonało?
Próbowałem w taki sposób: '''Grupa 1'', ''Grupa 2'', ''Grupa 3''', ale to nie działa. Natomiast działa, gdy wstawię pojedynczo, czyli: 'Grupa 1'. A chcę przekazać kilka nazw.

1

czemu za pierwszym razem piszesz w " a za drugim w '? W klasycznym SQLu działa tylko zapis z '

UPDATE teraz widze iż not nie są " tylko ''. co tu się dzieje :D

Spróbuj to napisac najpierw bez parametru czy zadziała. czyli pewnie:

SELECT grt_Id FROM sl_GrupyTw WHERE grt_Nazwa IN ('Grupa 1', 'Grupa 2', 'Grupa 3')

0

W ten sposób działa.

0

A co oznacza nie działa? Możesz dać więcej kodu jak to wywołujesz z parametrem?

0

To jest kawałek procedury składowanej. Walczę z jedną rzeczą. Generalnie to pierwszym parametrem tej procedury powinna być zmienna typu table. I jak to robię pod SQL Management Studio to jest ok. Ale muszę tą procedurę wywołać z poziomu VBA w Excelu. I tam mam problemy. Dlatego staram się to obejść.

0

Ja kto wykonujesz? Wiele baz traktuje takie konstrukcje jako string i wyszukije calego string. Tam pewnie trzeba bedzie jakoś przkonwertowac to liste.

0

Temat do zamknięcia. Udało się to ogarnąć jednak z typem TABLE. Wszystko działa. Dzięki.

2

to nie zadziała w ten sposób bo @groups jest stringiem i przyrównywana jest całość.
Najprościej użyć xml-a:

np, przekazujesz do proceduty: Grupa 1,Grupa 2,Grupa 3 jako @gr
i w kodzie

declare @groups xml
SET @groups =  N'<root><r>' + replace(@gr,',','</r><r>') + '</r></root>'

SELECT
    grt_Id
FROM
    sl_GrupyTw
WHERE
    grt_Nazwa IN (select 
                      t.value('.','varchar(150)') as [group items]
                from @groups.nodes('//root/r') as a(t)
                  )

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