SQL Server:快速而肮脏的数据验证查询?

时间:2018-11-13 03:22:26

标签: sql sql-server sql-server-2014

获取正在经历重大更改的数据库上的频繁更新。需要一种快速的方法来检查数据中的异常。 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% 

讨厌撞到这个。谁能把我弄出来以寻求解决方案?

非常感谢您的光临。

0 个答案:

没有答案