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.