0
我有以下SQL:SQL计数每列的所有表中的所有空的SYS表
SET NOCOUNT ON
DECLARE @Schema NVARCHAR(100) = 'dbo'
DECLARE @Table NVARCHAR(100) = NULL
DECLARE @sql NVARCHAR(MAX) =''
IF OBJECT_ID ('tempdb..#Nulls') IS NOT NULL DROP TABLE #Nulls
CREATE TABLE #Nulls (TableName sysname, ColumnName sysname, ColumnPosition int
, NullCount int , NonNullCount int)
SELECT @sql += 'SELECT '''+TABLE_NAME+''' AS TableName ,
'''+COLUMN_NAME+''' AS ColumnName, '''+CONVERT(VARCHAR(5),ORDINAL_POSITION)+'''AS ColumnPosition,
SUM(CASE WHEN '+COLUMN_NAME+' IS NULL THEN 1 ELSE 0 END) CountNulls ,
COUNT(' +COLUMN_NAME+') CountnonNulls FROM
'+QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(TABLE_NAME)+';'+ CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @Schema AND (@Table IS NULL OR TABLE_NAME = @Table)
INSERT INTO #Nulls
EXEC sp_executesql @sql
SELECT *
FROM #Nulls
此经过计算所有的空值我希望它的方式。不过,我想在一个目录在每个表使用此SQL循环例如在
information.schema.table
是否有人可以提供这样做所需的SQL,我使用游标完全一无所知。
谢谢
'和COALESCE(@ Table,TABLE_NAME)= TABLE_NAME'或'AND NULLIF(@ Table,TABLE_NAME)= TABLE_NAME' – Hogan
我收到错误:Msg 156,Level 15,State 1,Line 406 语法附近的语法错误关键字'列'。 Msg 156,Level 15,State 1,Line 412 关键字'列'附近的语法不正确。 – abs786123
@ abs786123你还改变了什么? – scsimon