[ sovabass @ 08.03.2012. 09:04 ] @
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.

[ Dusan Kondic @ 08.03.2012. 09:53 ] @
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
[ HladankaoLed @ 08.03.2012. 23:58 ] @
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.

[ sovabass @ 12.03.2012. 23:57 ] @
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