[Rozw] MSSQL - Zapytanie wildcard + join się krzaczy
: pt paź 11, 2019 12:46 pm
Trochę to wszystko skomplikowane, ale po kolei:
Są dwie bazy danych, jedna z Subiekta, i druga, załóżmy Towary. Zadaniem drugiej bazy jest uzupełnienie danych z Subiekta o pola których w nim nie ma. Złączenia następują po polu zawierającym symbol towaru. Tabela z bazy z Towary nie ma kolumny z nazwą towaru, bo ta siedzi już w subiekcie i ma być z niego zasysana. Podobnie np. kategorie towarów, mają być zasysane z subiekta. Czyli:
zmajstruje nam tabelę, gdzie będziemy mieli Symbol z naszej bazy, nazwę oraz nazwę kategorii z Subiekta oraz opis z naszej bazy.
I teraz problem: Takie samo zapytanie, ale pytające za pomocą zmiennej :VAR_SYMBOL o szukany symbol:
Wywala błąd: Stan SQL: 07002 [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error.
Zapytanie trafiające do serwera różni się od tego co wpisuję w BASE:
Przy procentach nie znajduje się cudzysłów a po dwa apostrofy. W momencie kiedy z palca odpalę to co przyszło z BASE dostaję błąd Msg 402
The data types varchar and varchar are incompatible in the modulo operator.. Kiedy dwa apostrofy poprawię na pojedyncze dostaję pusty wynik. W momencie kiedy z polecenia wywalę WHERE lub złączenia, zapytanie działa jak należy.
Postanowiłem oszukać system i w formularzu zrobiłem dwa podformularze: w jednym zapytanie z :VAR_SYMBOL bez złączeń, a w drugim tylko złączenia. Efekt ten sam.
Poradzicie mi coś, bo pomysły się powoli kończą.
Edit.
Nie wiem co jest grane, napisałem od początku kod sql i tym razem działa.
Są dwie bazy danych, jedna z Subiekta, i druga, załóżmy Towary. Zadaniem drugiej bazy jest uzupełnienie danych z Subiekta o pola których w nim nie ma. Złączenia następują po polu zawierającym symbol towaru. Tabela z bazy z Towary nie ma kolumny z nazwą towaru, bo ta siedzi już w subiekcie i ma być z niego zasysana. Podobnie np. kategorie towarów, mają być zasysane z subiekta. Czyli:
Kod: Zaznacz cały
SELECT "T"."Symbol", "ST"."tw_Nazwa" "Nazwa", "SG"."grt_Nazwa" "Kategoria" FROM "nasza"."dbo"."n_Towary" "T"
INNER JOIN "Subiekt"."dbo"."tw__Towar" "ST"
ON "T"."Symbol" = "ST"."tw_Symbol"
INNER JOIN "Subiekt"."dbo"."sl_GrupaTw" "SG"
ON "ST"."tw_IdGrupa" = "SG"."grt_Id"
I teraz problem: Takie samo zapytanie, ale pytające za pomocą zmiennej :VAR_SYMBOL o szukany symbol:
Kod: Zaznacz cały
SELECT "T"."Symbol", "ST"."tw_Nazwa" "Nazwa", "SG"."grt_Nazwa" "Kategoria" FROM "nasza"."dbo"."n_Towary" "T"
INNER JOIN "Subiekt"."dbo"."tw__Towar" "ST"
ON "T"."Symbol" = "ST"."tw_Symbol"
INNER JOIN "Subiekt"."dbo"."sl_GrupaTw" "SG"
ON "ST"."tw_IdGrupa" = "SG"."grt_Id"
WHERE ( UPPER ( "T"."Symbol" ) LIKE '%' + UPPER ( :VAR_SYMBOL ) + '%' OR UPPER ( :VAR_SYMBOL ) IS NULL )
Zapytanie trafiające do serwera różni się od tego co wpisuję w BASE:
Kod: Zaznacz cały
...
WHERE ( 0 = 1 ) AND ( ( UPPER ( "T"."Symbol" ) LIKE ''%'' + UPPER ( @P1 ) + ''%'' OR UPPER ( @P2 ) IS NULL ) )
The data types varchar and varchar are incompatible in the modulo operator.. Kiedy dwa apostrofy poprawię na pojedyncze dostaję pusty wynik. W momencie kiedy z polecenia wywalę WHERE lub złączenia, zapytanie działa jak należy.
Postanowiłem oszukać system i w formularzu zrobiłem dwa podformularze: w jednym zapytanie z :VAR_SYMBOL bez złączeń, a w drugim tylko złączenia. Efekt ten sam.
Poradzicie mi coś, bo pomysły się powoli kończą.
Edit.
Nie wiem co jest grane, napisałem od początku kod sql i tym razem działa.