[Rozw] MSSQL - Zapytanie wildcard + join się krzaczy

Użytkowanie programu bazodanowego

[Rozw] MSSQL - Zapytanie wildcard + join się krzaczy

Postprzez szczur3k » 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:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
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"


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:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
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 )


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:

Kod: Zaznacz cały   Rozszerz widokZwiń widok
    ...
    WHERE ( 0 = 1 ) AND ( ( UPPER ( "T"."Symbol" ) LIKE ''%'' + UPPER ( @P1 ) + ''%'' OR UPPER ( @P2 ) IS NULL ) )


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.
Ostatnio edytowano Śr lis 06, 2019 2:37 pm przez szczur3k, łącznie edytowano 1 raz
Windows 10 (x64), Libre Office 6.2.7.1 (x86)
szczur3k
 
Posty: 7
Dołączył(a): Pt paź 11, 2019 12:14 pm

Re: MSSQL - Zapytanie wildcard + join się krzaczy

Postprzez Jan_J » N paź 13, 2019 7:56 pm

Pojedynczy apostrof ' jest ogranicznikem danych tekstowych.
Podwójny apostrof " jest ogranicznikiem nazw systemowych encji.
Więc jest dobrze.

The data types varchar and varchar are incompatible in the modulo operator dotyczy fragmentu LIKE ''%'' co rozumiem następująco:
prawy argument operatora LIKE opisuje wzorzez tekstu. We wzorcu symbol % jest metaznakiem zastępującym grupę znaków. Tak by było w przypadku 'bla%bla' albo 'bla' || '%' || 'bla'.
Ale w ''%'' symbol % występuje poza tekstem, więc oznacza operację dzielenia modulo, a ta jak wiadomo jest niewykonalna na tekstach (w tym przypadku pustych).

Spróbowałbym zastąpić operator + operatorem łączenia tekstów ||
JJ
LO Still (6.2) ∙ AOO 4.1.7 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3992
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: MSSQL - Zapytanie wildcard + join się krzaczy

Postprzez szczur3k » Pn paź 14, 2019 8:19 am

Co do zamiany '+' na '||', tak wyglądało zapytanie na początku i serwer wyrzucał błąd Incorrect syntax near '|'. Zgodnie z dokumentacją w TSQL konkatenację uzyskujemy właśnie za pomocą '+'. Podsumowując, polecenie bez złączeń działa bez problemu z pojedynczymi apostrofami i plusami. Schody zaczynają się w momencie, kiedy do zapytania dochodzą złączenia.
Windows 10 (x64), Libre Office 6.2.7.1 (x86)
szczur3k
 
Posty: 7
Dołączył(a): Pt paź 11, 2019 12:14 pm

Re: [Rozw] MSSQL - Zapytanie wildcard + join się krzaczy

Postprzez Jan_J » Śr lis 06, 2019 5:24 pm

Nie wiem co jest grane, napisałem od początku kod sql i tym razem działa.

Nie jest całkiem ok, bo (a) nie wiadomo dlaczego, (b) czytelnicy w przyszłości nie odniosą pożytku.
Base to trudny przypadek. Ale najważniejsze, że udało się opanować problem.
JJ
LO Still (6.2) ∙ AOO 4.1.7 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3992
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [Rozw] MSSQL - Zapytanie wildcard + join się krzaczy

Postprzez szczur3k » Cz lis 07, 2019 10:51 am

W sumie racja. Problem rozwiązałem tak, że zrezygnowałem z łączenia tabel w dwóch bazach danych, a potrzebne dane są pobierane z tabel subiekta do mojej bazy za pomocą merge-a. Wiem, mało eleganckie, ale baza niewielka więc da się z tym żyć. Wniosek - base ma problem z jednoczesnym pobieraniem danych z dwóch baz mimo prawidłowych uprawnień itp.
Windows 10 (x64), Libre Office 6.2.7.1 (x86)
szczur3k
 
Posty: 7
Dołączył(a): Pt paź 11, 2019 12:14 pm

Re: [Rozw] MSSQL - Zapytanie wildcard + join się krzaczy

Postprzez Jan_J » Cz lis 07, 2019 11:27 am

szczur3k napisał(a):Wniosek - base ma problem z jednoczesnym pobieraniem danych z dwóch baz mimo prawidłowych uprawnień itp.
To mnie nie dziwi. W końcu jest to interfejs użytkowy bazy danych, a nie łącznik między bazami.
Ile razy potrzebowałem fuzję OpenOffice'a z PostgreSQL, najwygodniejsze okazywało się rozwiązanie Calc + makro Python, bez udziału Base. Przy tej technologii liczba `otwartych` baz nie ma znaczenia.
JJ
LO Still (6.2) ∙ AOO 4.1.7 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3992
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [Rozw] MSSQL - Zapytanie wildcard + join się krzaczy

Postprzez szczur3k » Cz lis 07, 2019 11:31 am

Tutaj akurat kwestia dotyczy "klikalnej" możliwości edycji wpisów w bazie za pomocą formularza w base. Ale zaciekawiłeś mnie, bo akurat siedzę nad jednym arkuszem który zaciąga dane z bazy za pomocą base-a i działa to średnio. Czyli rozumiem, że można do Calca zaciągnąć dane bezpośrednio z bazy, z pominięciem base? Możesz coś więcej napisać na ten temat?
Windows 10 (x64), Libre Office 6.2.7.1 (x86)
szczur3k
 
Posty: 7
Dołączył(a): Pt paź 11, 2019 12:14 pm


Powrót do Base

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość