Rozpoznanie kilku zapytań SQL

0

Cześć, nie ukrywam, że nie mogę sobie poradzić z algorytmem i piszę tego posta, bo może ktoś z Was już coś takiego robił albo będzie potrafił mnie jakoś naprowadzić.

Załóżmy, że mamy jakąś kontrolkę edycyjną(np. memo) i w niej wprowadzamy zapytania sql.

Oczywiście zapytanie może być jedno:

select * from tabela

ale mogą być też dwa i więcej, np:

select * from tabela
select * from tabela1

Oczywiście zaznaczam, że poniżej też są tylko 2 zapytania:

select * from tabela
union all
select * from tabela2

select * from tabela3

tutaj też są tylko dwa zapytania:

select a.* 
from
(
  select * from tabela
) as a

select * from tabela2

A tutaj jest tylko jedno:

insert into tabela
select * from tabela2

I pytanie. Jak rozpoznać, ile jest zapytań i gdzie się zaczyna jedno, a kończy drugie.

0
Juhas napisał(a)

Jak rozpoznać, ile jest zapytań i gdzie się zaczyna jedno, a kończy drugie.

Wygląda na to, że trzeba policzyć insterty i selecty (z wyjątkiem zagnieżdżonych), jedno kończy się, zanim zacznie się drugie...

Juhas napisał(a)

Załóżmy, że mamy jakąś kontrolkę edycyjną(np. memo) i w niej wprowadzamy zapytania sql.

Brzmi bardzo bezpiecznie ;P

0

Albo kończyć średnikami zapytania ;)

0
somekind napisał(a)

Wygląda na to, że trzeba policzyć insterty i selecty (z wyjątkiem zagnieżdżonych), jedno kończy się, zanim zacznie się drugie...

No właśnie z tym jest problem. Bo jak rozpoznać zagnieżdżone, jak rozpoznać insert z selecta itd.

[losowa nazwa] napisał(a)

Albo kończyć średnikami zapytania ;)

No to jest najprostsze ;>
Jeśli nie da się inaczej w miarę łatwo to albo przy tym zostanę, albo zrezygnuję w ogóle z tego pomysłu.

0

wątpię czyu dasz rade. Co więcej nie widziałem żadnego narzędzia, które by coś takiego potrafiło. Jedyne wyjście to kończyć każde zapytanie jakimś znakiem, np. średnikiem

0
[losowa nazwa] napisał(a)

Albo kończyć średnikami zapytania ;)

Tak jak trzeba to robic w management studio ;) T-SQL zreszta wymaga srednika na koncu zapytania, jesli jest ich wiecej, wiec czemu odchodzic od tego? Taka jest przeciez specyfika jezyka.

0

Uruchom chociażby MS SQL Management Studio.

Owszem, nie mówię o create, ale instrukcje typu select i insert są ładnie rozpoznawane i żadnych średników, ani nic nie trzeba :)

No i głównie o to mi chodzi.

0

No to napisz sobie parser T-SQLa. Skladnia jest dokladnie opisana. Tylko po co, skoro sredniki sa ladnym rozwiazaniem?

0
johny_bravo napisał(a)

No to napisz sobie parser T-SQLa.

Podejrzewałem, że tak się skończy, ale chciałem się upewnić ;)

Tak więc przy średnikach zostaję.

0

W mojej firmie używamy napisanego przez nas parsera T-SQL, który w przypadku próby dodania obiektu do bazy stawia w kodzie średniki po każdym wyrażeniu, automatycznie generuje i dostawia aliasy, formatuje kod, rozpoznaje nazwy obiektów w bazie oraz robi jeszcze masę innych ciekawych rzeczy np. odłącza od serwera niesfornych programistów ;)

Zagadnienie jest nietrywialne ale do zrobienia.

0

SQL ma prostą gramatykę. Można sobie ściągnąć gotową gramatykę do np. Antlra i wygenerować parser.

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