SQL Server: zobrazení počtu řádků a velikosti jednotlivých tabulek v KB přes všechny tabulky databáze #v2

SELECT SCHEMA_NAME(sysTab.SCHEMA_ID) AS SchemaName,
       sysTab.NAME AS TableName,
       parti.rows AS RowCounts,
       SUM(alloUni.total_pages) * 8 AS TotalSpaceKB,
       SUM(alloUni.used_pages) * 8 AS UsedSpaceKB,
       (SUM(alloUni.total_pages) - SUM(alloUni.used_pages)) * 8 AS UnusedSpaceKB
FROM sys.tables sysTab
INNER JOIN sys.indexes ind ON sysTab.OBJECT_ID = ind.OBJECT_ID
AND ind.Index_ID<=1
INNER JOIN sys.partitions parti ON ind.OBJECT_ID = parti.OBJECT_ID
AND ind.index_id = parti.index_id
INNER JOIN sys.allocation_units alloUni ON parti.partition_id = alloUni.container_id
WHERE sysTab.is_ms_shipped = 0
  AND ind.OBJECT_ID > 255
  AND parti.rows>0
GROUP BY sysTab.Name,
         parti.Rows,
         sysTab.SCHEMA_ID
ORDER BY parti.rows DESC

 

SQL LINQ vs. Guid.Empty

Nikdy jsem na to zatím nenarazil, nebo si toho minimálně nevšimnul, ale v LINQ dotazu platí následující:

Guid.Empty != new Guid("00000000-0000-0000-0000-000000000000")

konkrétní příklad:

var a = query.Where(row => row.InvoiceId == Guid.Empty);

var b = query.Where(row => row.InvoiceId == new Guid("00000000-0000-0000-0000-000000000000"));

logicky bych čekal, že výsledek bude identický, tedy a i b budou obsahovat kolekci identických objektů, ale výsledek je ten, že a obsahuje prázdnou kolekci, b obsahuje všechny záznamy kde je InvoiceId rovno Guid.Empty, což je sice to samé, LINQ to ale zjevně interpretuje jinak a první příklad je tedy nefunkční, respektive nevrací očekáváné výsledky.

Na otázku PROČ jsem nenašel žádnou smysluplnou odpověď. BUG?

SQL Server: zobrazení počtu řádků, sloupců, velikosti tabulek v KB přes všechny tabulky v databázi

Úžasný script pro zobrazení přehledných statistický informací o databázi, zejména pokud hledáte největší tabulky v neznámé struktuře databáze:

image

[more]

USE DatabaseName 
GO 
CREATE TABLE #temp ( 
table_name sysname , 
row_count INT, 
reserved_size VARCHAR(50), 
data_size VARCHAR(50), 
index_size VARCHAR(50), 
unused_size VARCHAR(50)) 
SET NOCOUNT ON 
INSERT #temp 
EXEC sp_msforeachtable 'sp_spaceused ''?''' 
SELECT a.table_name, 
a.row_count, 
COUNT(*) AS col_count, 
a.data_size 
FROM #temp a 
INNER JOIN information_schema.columns b 
ON a.table_name collate database_default 
= b.table_name collate database_default 
GROUP BY a.table_name, a.row_count, a.data_size 
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC 
DROP TABLE #temp

 

Zdroj:

http://blog.sqlauthority.com/2007/01/10/sql-server-query-to-find-number-rows-columns-bytesize-for-each-table-in-the-current-database-find-biggest-table-in-database/