Just nu i M3-nätverket
Jump to content

Vilka tabeller är i bruk?


rusk

Recommended Posts

Hej!

Jag har en SQL databas som innehåller mer än 1000 tabeller.

Min fråga är finns det något SQL utryck(enkelt) som talar om vilka tabeller som används eller innehåller data?

 

Hälsningar

Mats

 

Link to comment
Share on other sites

Det är nog stört omöjligt att på nåt plattformsoberoende sätt säga exakt vilka som används (om man inte kan avgöra det från datat), vilka tabeller som är tomma är däremot rätt lätt att ta reda på, det är bara säga

SELECT COUNT(*) FROM <tabellnamn>

 

Link to comment
Share on other sites

Ok.

Det finns inget komando som gör det möjligt att söka igenom alla tabeller i aktuell databas utan att behöva göra utsökning på varje specifik tabell?

 

Link to comment
Share on other sites

Beror lite på vilken databas det är hur man enklast gör.

Jag skulle skriva ett perl- eller java-hack som itererade över tabellerna och körde frågan.

 

 

Link to comment
Share on other sites

Utan att vilja låta elak men om du inte vet om du kör (här kommer förslag på namn:) Oracle, DB2, MS SQL Server, Informix, MySQL, Access eller nåt annat så tror jag inte att du kommer att kunna lösa det scriptmässigt heller.

 

Hur har du hamnat i situationen? Det verkar högst onormalt att ha tusentals tabeller i samma databas (och det är inte nödvändigtvis samma sak som "databas" i texterna ovan) utan att veta vilka som används och inte?

 

Link to comment
Share on other sites

Du har helt rätt jag tror inte heller att jag kan fixa ett script på egen hand.

jag har en MS SQL Server som vi kör ett antal olika databaser på.

hur jag har hamnat i denna situation beror på att jag sitter och vill söka ut information ur ett affärssystem med hjälp av Sql, men eftersom jag inte är bevandrad i systemet så hoppades jag på att slippa leta igenom alla 1196 tabeller för att se vilka som används.

 

Link to comment
Share on other sites

MattiasCanberger

För att räkna antal rader i varje tabell kan du köra följande:

 

DECLARE @Table SYSNAME

DECLARE @Cmd VARCHAR(500)

 

DECLARE Tables CURSOR FOR

SELECT TABLE_SCHEMA + '.' + TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

 

OPEN Tables

FETCH NEXT FROM Tables INTO @Table

 

WHILE @@FETCH_STATUS = 0

BEGIN

SET @Cmd = 'SELECT ''' + @Table + ''' AS TableName, COUNT(*) AS NumRows FROM ' + @Table

EXECUTE(@Cmd)

FETCH NEXT FROM Tables INTO @Table

END

 

CLOSE Tables

DEALLOCATE Tables

 

 

För att ta reda på vilka tabeller som verkligen används bör du nog kontakta din system leverantör. Om du inte kan göra det kan du starta profiler och köra en trace under några dagar för att på så vissa hitta de som används. Risken är dock stor at du missar nån/några.

 

 

Link to comment
Share on other sites

Erik Junesjö

Här är ett annat sätt som man kan använda i sqlserver:

SELECT 
'Owner'=convert(char(10),t.TABLE_SCHEMA), 
'TableName'=convert(char(25),t.TABLE_NAME), 
'RecCount'=max(i.rows)
 from sysindexes i JOIN INFORMATION_SCHEMA.TABLES t
ON t.TABLE_NAME = object_name(i.id)
WHERE t.TABLE_TYPE = 'BASE TABLE'
GROUP BY t.TABLE_SCHEMA, t.TABLE_NAME
GO

\\Erik

 

Link to comment
Share on other sites

MattiasCanberger

Tror inte man kan lita på rows i sysindexes.

Har för mig att den uppdateras när man skapar indexet eller bygger om det/uppdaterar statistiken på det.

Din lösning är snabbare men är osäker på om det är korrekt

 

/Mattias

 

Link to comment
Share on other sites

MattiasCanberger

Ja, men frågan är vad som går snabbast. Uppdatera statistiken på 1196 tabeller eller att göra en tablescan (count(*)) på alla.

 

Dessutom returnerar rows 0 för de tabeller som har en text eller image kolumn i sig.

/Mattias

 

[inlägget ändrat 2003-01-17 16:11:46 av Tias C]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...