Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: liczba rekordow w tabeli
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
nameless
chce napisac funkcje ktora jako argument przyjmuje nazwe table a zwraca liczbe rekordow ktore zawiera
ma ktos pojecie jak to zrobic?
FiDO
W tresci funkcji generujesz zapytanie typu SELECT COUNT(*) FROM [tabela], gdzie tabela jest brana z tej zmiennej i wysylasz to zapytanie do bazy.

PS. uspokoj sie z tymi tematami, w ciagu ostatnich godzin zalozyles tutaj juz 6 tematow, jesli masz tyle problemow to opisz je w jednym zbiorczym temacie.
nameless
w funkcji nie moge uzyc sp_executesql

ps. pisze duzo postow bo mam konkretne tematy
dzieki za odpowiedz na jeden ale reszta zostaje dalej bez odpowiedzi
a nie sa to pytania typu co mi nie dziala w joinie albo czmu mi sie mnoza rekordy tylko badziej zaawansowane sprawy, ktore naprawde trzeba przymyslec
SongoQ
Racja ten post naprawde byl zaawansowany. Przeciez @FiDO podac Ci jakie ma byc zapytanie, a jak napisac funkcje to w kazdym manualu do MSSQLa znajdziesz, no chyba ze chesz to napisac w php to jeszcze prosciej. Radze wczesniej szukac a nie pytac sie i czekac az ktos Ci gotowca napisze, no chyba ze "Praca oferowana"
nameless
widze ze to forum nie jest duzo warte
nie chodzi ni o funkcje w php tylko t-sql
w funkcji w t-sqlu nie moge uzyc sp_execute sql wiec jak mam wywolac
select count(*) from @Tabela ?
przecierz tak sie nie da
SongoQ
Może mnie nie zrozumiałeś, ale po pierwsze nie podałeś jaka to jest funkcja. Nie podałeś szczegółów co i jak ma być. Przecież nie będziemy zgadywać.

Odnośnie problemu chyba wygląda na to ze nie można wstawiać SQLa, ale może napisz sobie funkcyjkę w MSSQLu i ja po prostu wywołaj, albo masz cos niepoprawnie. Pokaz kod może ktoś wpadnie na jakiś pomysł? Bo tak jak juz mówiłem nikt nie będzie zgadywał o co Ci chodzi.

Cytat
widze ze to forum nie jest duzo warte

Jak będą caly czas takie pytania to na pewno nie będzie dużo warte.
nameless
create function LiczbaRekordow(@Tabela nvarchar(255))
returns int
as
begin
declare @LiczbaRekordow int
--
-- tutaj ma byc jakis kod ktory pobiera ilosc rekordow z @Tabela
--
return @LiczbaRekordow
end

sory troche sie unioslem
SongoQ
W Postgresie i ORACLE to by bylo cos takiego:

  1. SELECT COUNT(*)
  2. INTO @LiczbaRekordow FROM @Tabela;


Sprawdz moze zadziala, na MSSQLu sie nie znam ale takie cos jest w innych bazkach.
nameless
no wlasnie nie moge uzyc zmiennej jako nazwy tabeli z ltorej pobieram dane
moge zbudowac stringa ktorego pozniej przekazuje do procedury sp_executesql
np set @query=N'select count(*) from '+@Tabela
ale w funkcji nie moge wywolac procedury sp_execute sql

i kolo sie zamyka

sam widzisz ze to nie takie proste
a szukalem na ten temat duzo
FiDO
Trzeba bylo odrazu pisac, ze chodzi Ci o funkcje/procedure w T-SQL'u... w takim razie jesli nie mozesz korzystac z execute to nie da rady zrobic tego w pelni dynamicznie. Jesli tych tabel nie ma duzo to mozesz zrobic duzego IF'a dla kazdej tabeli, innego wyjscia z takimi restrykcjami nie widze.
nameless
chodzi o to zeby to bylo uniwersalne
if mnie nie satysfakcjonuje
a tabel jest tyle ze kazdego miesiaca jest ich dodawanych ok kilkunastu
a takich baz jest na serwerze w tej chwili 8
SongoQ
Ale z tego co widze to nie jest problem z dynamika tego zapytania tylko jak wywolac zapytanie z dynamiczna tabela (tabela zalezna od parametru funkcji)

Wstaw jakas wartosc zamiast tej zmiennej i zobaczysz czy jest problem z wykonaniem zapytania czy poprostu nie mozna w ten sposob laczyc. Dodam tylko ze PL/SQL laczy sie stringi przez || a nie +, sprawdz moze to pomoze.

Radze szukac w manualu na temat dynamicznego zapytania, podobnie to bedzie rozwiazaniem Twojego innego tematu na tym forum.
nameless
w t-sql + laczy stringi
jesli wstawie normanie nazwe tabeli dziala jesli wstawie @Tabela to sql msli ze tak nazywa sie tabela a nie podstawi wartosc zmeinnej

o ktory temat chodzi?
FiDO
Cytat(nameless @ 2005-08-31 14:45:05)
chodzi o to zeby to bylo uniwersalne
if mnie nie satysfakcjonuje
a tabel jest tyle ze kazdego miesiaca jest ich dodawanych ok kilkunastu
a takich baz jest na serwerze w tej chwili 8

No to przykro mi, ale nie sadze aby bylo rozwiazanie spelniajace Twoje warunki...

SQL Server nie umozliwia przekazywania nazwy tabeli jako zmienna, wiec albo dynamiczne zapytanie i execute albo kicha..

Nie rozumiem dlaczego nie mozesz uzyc execute, przy tak prostym zapytaniu powinno to byc dosc wydajne.

Jest jeszcze szansa, ze dane o ilosci elementow sa trzymane w tabeli systemowej, w ktorej sa rozne dane o tabelach (i innych obiektach), ale wlasnie wrocilem z pracy, gdzie mam dostep do Sql Servera wiec juz dzisiaj tego nie sprawdze.
nameless
w t-sqlu w funkcjach nie mozna uzywac procedur skladowanych a so_executesql taka jest tyle ze wbudowana

funkcje zasadniczo zwracaja jakis obiekt
to co zwracaja deklarujesz na poczatku
funkcja prze wykonaniem wie co uzytkownik dostanie
a teraz wyobraz sobie ze w srodku takiej funkcji wykonujesz select * from Tabela za pomoca executa uzytkownik dostaje tabele zamiast inta
dlatego nie da sie tego uzyc
FiDO
To dlaczego nie zrobisz tego jako procedure ?
nameless
tak chyba bede musial zrobic
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.