Principale utente con più risposte
Analisi righe Tabelle Database

Domanda
-
Ciao,
volendo improntare un piano di pulizia di alcune tabelle temporanee, vorrei poter eseguire una query che mi restituisse il nome della tabella ed il numero di righe presenti.
In particolar modo vorrei poter analizzare tutte le tabelle dbo.TEMP***** ed il relativo numero di righe.
Mi potere dare due dritte?
Grazie
Marco
Risposte
-
Ciao,
prova questa:
SELECT
s.Name AS SchemaName,
t.NAME AS TableName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
SUM(a.used_pages) DESCAggiungi il filtro di cui hai bisogno nella WHERE
HTH,
Cris
Please Mark This As Answer if it solved your issue or Vote This As Helpful if it helps to solve your issue. Thank you!
- Proposto come risposta Sergio GovoniMVP, Moderator martedì 19 marzo 2019 23:46
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 25 marzo 2019 14:30
Tutte le risposte
-
Ciao,
prova questa:
SELECT
s.Name AS SchemaName,
t.NAME AS TableName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
SUM(a.used_pages) DESCAggiungi il filtro di cui hai bisogno nella WHERE
HTH,
Cris
Please Mark This As Answer if it solved your issue or Vote This As Helpful if it helps to solve your issue. Thank you!
- Proposto come risposta Sergio GovoniMVP, Moderator martedì 19 marzo 2019 23:46
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 25 marzo 2019 14:30
-
-
-
-
porca miseria....
volessi tenere il tuo script per l'identificazione degli oggetti temporanei.... posso passare i nomi delle varie tabelle ad una variabile ed effettuare il truncate delle tabelle?....
come dovrei fare...
Marco
Marco
-
.
volessi tenere il tuo script per l'identificazione degli oggetti temporanei.... posso passare i nomi delle varie tabelle ad una variabile ed effettuare il truncate delle tabelle?....
come dovrei fare...
Ciao Marco,
una volta identificate le tabelle con la query di Cristiano, potresti "scriptarti" i comandi di TRUNCATE oppure fare un ciclo (anche se meno performante, in questo caso può essere trascurabile).
Per scriptare i comandi, partendo dalla query di Cristiano, potresti valutare questa variante nella SELECT:
SELECT s.Name AS SchemaName, t.NAME AS TableName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB, 'TRUNCATE TABLE [' + s.Name + '].[' + t.NAME + ']' AS Truncate_Statement
Ciao
Sergio Govoni
Microsoft Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn
- Modificato Sergio GovoniMVP, Moderator martedì 19 marzo 2019 23:55
-
Fantastico!!!... funziona!!)
Ho dovuto escludere però dal TRUNCATE una tabella per violazione delle foreygn keys... è normale?.. c'è altra soluzione?.. forse eseguendo il delete ??....
Altra cosa.... per eseguire i comandi ho copiato ed incollato il risultato della colonna Truncate_statement... è corretot o dovevo usare un'altro procedimento?...
Grazie mille intanto...
Marco
-
Ho dovuto escludere però dal TRUNCATE una tabella per violazione delle foreygn keys... è normale?.. c'è altra soluzione?.. forse eseguendo il delete ??....
E' una delle limitazioni del comando TRUNCATE. Preso da Docs: "Non è possibile utilizzare TRUNCATE TABLE sulle tabelle a cui fa riferimento un vincolo FOREIGN KEY. È possibile troncare una tabella con una chiave esterna che fa riferimento alla tabella stessa". Qui trovi tutti i dettagli. Il comando DELETE non ha questa specifica limitazione.
Altra cosa.... per eseguire i comandi ho copiato ed incollato il risultato della colonna Truncate_statement... è corretot o dovevo usare un'altro procedimento?...
E' corretto.
Ciao!
Sergio Govoni
Microsoft Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn
- Modificato Sergio GovoniMVP, Moderator giovedì 28 marzo 2019 23:02
-
Riprendo l'argomento perchè mi sono incuriosito per lo script..
Avreste un esempio di come potrei assegnare ad una variabile il valore del Truncate da eseguire?....
Potrei poi salvare lo script su una store procedure ed avviarla tramite una pianificazione.. così sarebbe il top!!... però non saprei come creare lo script..
Marco