Cześć.
Mam następujący problem: dostaję od użytkownika jakieś zapytanie select i chcę się dowiedzieć jak najmniejszym kosztem, ile wierszy zwróci to zapytanie. Przez jak najmniejszy koszt rozumiem brak konieczności parsowania otrzymanego zapytania i jego modyfikacji, a także brak konieczności wykonania go na bazie i ręcznego zliczania wierszy bądź wykonywania po wszystkim @@ROWCOUNT.
Próbowałem wykorzystać do tego count()* w następujący sposób: dla przykładowego zapytania
select * from tabelka
chciałem zrobić coś takiego:
select count(*) from (select * from tabelka) as tempTable
ale ta metoda nie zadziała, jeżeli oryginalne zapytanie zawiera iloczyn kartezjański. Przykładowo dla takiego orgyinalnego zapytania
select * from tabelka a, tabelka b
po przeróbce otrzymam błąd, że jakaś kolumna została wyspecyfikowana dwukrotnie.
Próbowałem też podmienić wszystko od select do from i wstawić tam count()*, ale to zepsuje mi się dla funkcji agregujących, bo na przykład z takiego zapytania:
select max(ID) from tabelka
otrzymam:
select count(*) from tabelka
co oczywiście daje zły wynik. Używam MS SQL Server 2008R2.
Będę wdzięczny za jakieś wskazówki.
Pozdrawiam,
Afish