获取正在经历重大更改的数据库上的频繁更新。需要一种快速的方法来检查数据中的异常。 1,000多张桌子;约200 实际被使用。
想在顶部列出记录最多的表。找到并修改了似乎有效的代码:
select
object_name(object_id) AS TableName,
sum(rows) AS TableRowCount
from
sys.partitions
where
index_id in (0, 1)
group by
object_id
order by
TableRowCount desc
但是,也有必要指出列是否正确填充。拥有有效行的百分比以及NULL,空白和零的百分比将是很棒的。
偶然发现了这个片段:
SELECT
TABLE_NAME,
COLUMN_NAME,
dbo.ExecuteScalarToInt('SELECT ISNULL(SUM(CASE WHEN ' + QUOTENAME(COLUMN_NAME) + ' IS NULL THEN 1 ELSE 0 END) * 100.00/count(*), 0) Percentage FROM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) Percentage
FROM
INFORMATION_SCHEMA.COLUMNS
但是,这会引发错误:
找不到列“ dbo”或用户定义的函数或聚合“ dbo.ExecuteScalarToInt”,或者名称不明确。
嗯。我删除了dbo.ExecuteScalarToInt
部分:
SELECT
TABLE_NAME,
COLUMN_NAME,
('SELECT ISNULL(SUM(CASE WHEN ' + QUOTENAME(COLUMN_NAME) + ' IS NULL THEN 1 ELSE 0 END) * 100.00/count(*), 0) Percentage FROM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) AS Percentage
FROM
INFORMATION_SCHEMA.COLUMNS
ORDER BY
TABLE_NAME ASC, COLUMN_NAME ASC
这有效,但是对于百分比列,将显示一个SQL查询。尝试了产生的SQL查询-它可以正常工作。
尝试用“ exec”,“ sp_executesql”和“ exec sp_executesql”代替。 有错误。
这是我在想像的输出内容,类似于:
TableName TableRows ColumnName PctPopulatedRows PctNULLs PctBlanks PctZeros
LineItems 4,649,764 InventryNum 100.0% 0.0% 0.0% 0.0%
LineItems 4,649,764 Description 99.9% 0.0% 0.1% 0.0%
LineItems 4,649,764 Price 99.7% 0.0% 0.1% 0.2%
.
.
.
Invoices 385,532 InvoiceNum 100.0% 0.0% 0.0% 0.0%
Invoices 385,532 DateTime 99.6% 0.2% 0.1% 0.1%
Invoices 385,532 TotalAmt 99.8% 0.0% 0.2% 0.0%
.
.
.
Customers 64,906 CustomerNum 100.0% 0.0% 0.0% 0.0%
Customers 64,906 CustStreet 99.8% 0.0% 0.2% 0.0%
Customers 64,906 CustZip 99.7% 0.1% 0.2% 0.0%
讨厌撞到这个。谁能把我弄出来以寻求解决方案?
非常感谢您的光临。