Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

SQL upit,problem

[es] :: MS SQL :: SQL upit,problem

[ Pregleda: 2226 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sovabass
Banja Luka

Član broj: 96338
Poruke: 43
*.stat.customer.blic.net.



Profil

icon SQL upit,problem08.03.2012. u 09:04 - pre 146 meseci
Pozdrav,

imam bazu sa nekoliko stotina tabela koje nisu u nikakvoj relaciji.Nazivi tabela su tabela_1,tabela_2.....itd.
Potrebna mi je skripta koja provjeriti broj redova svih tabela i vratiti nazive tabela koje imaju manje od npr. tri unosa/reda.

 
Odgovor na temu

Dusan Kondic
Programer
ZR "Parametar" Ljubovija
Ljubovija

Član broj: 49961
Poruke: 225
*.adsl-1.sezampro.rs.

Sajt: www.drinacoding.com


+14 Profil

icon Re: SQL upit,problem08.03.2012. u 09:53 - pre 146 meseci
Code:
DECLARE @MaxBrRedova INT
SET @MaxBrRedova = 3 --IZABERI BROJ REDOVA KOJI ZELIS

CREATE TABLE #T (NazivTabele VARCHAR(100), BrRedova INT, RBr INT IDENTITY(1,1))
INSERT INTO #T (NazivTabele, BrRedova) SELECT name AS NazivTabele, 0 AS BrRedova FROM sys.tables WHERE type = 'U'
--ako je verzija SQL 2000, onda je     SELECT name AS NazivTabele, 0 AS BrRedova FROM sysobjects WHERE type = 'U'

DECLARE @SqlCmd NVARCHAR(250)
DECLARE @I INT

SET @I = 1
WHILE @I <= (SELECT MAX(RBr) FROM #T)
BEGIN
SET @SqlCmd = 'UPDATE #T SET BrRedova = (SELECT COUNT(*) FROM [' + (SELECT NazivTabele FROM #T WHERE RBr = @I) + 
']) FROM #T WHERE RBr = ' + CAST(@I AS VARCHAR(4))
EXEC sp_executesql @SqlCmd
SET @I = @I + 1
END

SELECT NazivTabele, BrRedova FROM #T WHERE BrRedova < @MaxBrRedova ORDER BY BrRedova DESC, NazivTabele

DROP TABLE #T
GO

Pozdrav
 
Odgovor na temu

HladankaoLed
Database Consultant
Vienna, Austria

Član broj: 228937
Poruke: 36
*.5.14.univie.teleweb.at.

Sajt: milossql.wordpress.com


+1 Profil

icon Re: SQL upit,problem08.03.2012. u 23:58 - pre 146 meseci
Alternativa je koriscenje tzv. metapodataka. Umesto da se broj rekorda racuna za svaku tabelu (i time mnoga od njih skenira) koristi se upit koji ukljucuje catalog views. Evo koda:

Code:
SELECT s.name + '.' + t.name TableName, SUM(p.rows) NumberOfRows
FROM sys.tables t
INNER JOIN sys.partitions p 
    ON p.object_id = t.object_id
INNER JOIN sys.schemas s 
    ON t.schema_id = s.schema_id
WHERE t.is_ms_shipped = 0 AND p.index_id IN (0,1)
GROUP BY s.name, t.name
ORDER BY 2 DESC


Upozorenje! Ovaj kod vraca aproksmativne vrednosti, ne uvek tacan broj rekorda! Pa ako je zaista bitno da li je 123778 ili 123779 onda ovaj pristup nije dobar. Ukoliko je, pak, sitno odstupanje dozvoljeno onda je ovo odlican izbor jer se izbegava pristup tabelama i njihovo zakljucavanje.

Poz,
M.


Sad šta je tu je. A možda će da dođe i ova tvoja tetka iz Bosanske Krupe.
 
Odgovor na temu

sovabass
Banja Luka

Član broj: 96338
Poruke: 43
..able.dyn.broadband.blic.net.



Profil

icon Re: SQL upit,problem12.03.2012. u 23:57 - pre 146 meseci
Hvala ljudi,

bio sam na odmoru tako da kasnim sa odgovorom.

Testirao sam obe skripte,sve je ok,s tim da prijedlog Hladnog ne funkcionishe na MSSQL2000 ,samo na 2008.

Hvala jos jednom,

Pozz
 
Odgovor na temu

[es] :: MS SQL :: SQL upit,problem

[ Pregleda: 2226 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.