DWH内のすべてのテーブルをチェックして、どの列がnullであるかを確認する次のストアドプロシージャを作成しました。同様に、数値列がゼロであることを確認するために同じことができます。
alter PROCEDURE EMPTYSEARCH
@WHICHTABLE VARCHAR(50)
AS
SET NOCOUNT ON
DECLARE @SQL nVARCHAR(max),
@TABLENAME VARCHAR(max) ,
@COLUMNNAME VARCHAR(max)
CREATE TABLE #RESULTS(TBLNAME VARCHAR(60),COLNAME VARCHAR(60),SQL VARCHAR(600))
SELECT
SYSOBJECTS.NAME AS TBLNAME,
SYSCOLUMNS.NAME AS COLNAME,
TYPE_NAME(SYSCOLUMNS.XTYPE) AS DATATYPE
INTO #FKFINDER
FROM SYSOBJECTS
INNER JOIN SYSCOLUMNS ON SYSOBJECTS.ID=SYSCOLUMNS.ID
WHERE SYSOBJECTS.XTYPE='U'
AND SYSOBJECTS.NAME = @WHICHTABLE
AND TYPE_NAME(SYSCOLUMNS.XTYPE) IN ('VARCHAR','NVARCHAR','CHAR','NCHAR')
ORDER BY TBLNAME,COLNAME
DECLARE C1 CURSOR FOR
SELECT TBLNAME,COLNAME FROM #FKFINDER ORDER BY TBLNAME,COLNAME
OPEN C1
FETCH NEXT FROM C1 INTO @TABLENAME,@COLUMNNAME
WHILE @@FETCH_STATUS <> -1
BEGIN
SET @SQL = '
IF EXISTS(SELECT * FROM [' + @TABLENAME + '] WHERE (select count(*) from [' + @TABLENAME + '] where [' + @COLUMNNAME + '] is null) = (select count(*) from [' + @TABLENAME + ']))
INSERT INTO #RESULTS(TBLNAME,COLNAME,SQL) VALUES(''' + @TABLENAME + ''',''' + @COLUMNNAME + ''',''
SELECT * FROM [' + @TABLENAME + '] WHERE (select count(*) from [' + @TABLENAME + '] where [' + @COLUMNNAME + '] is null) = (select count(*) from [' + @TABLENAME + '] '') ;'
PRINT @SQL
EXEC (@SQL)
FETCH NEXT FROM C1 INTO @TABLENAME,@COLUMNNAME
END
CLOSE C1
DEALLOCATE C1
SELECT * FROM #RESULTS