2017-03-16 1 views
0

夜間ジョブの実行後に変更された内容をデータウェアハウスのすべてのテーブルでテストできるようにしたい。どのテーブルに行がないのかを調べるために、以下のクエリを使用していますが、ジョブの実行後にどのフィールドにnull値があるかなどのテストを展開したいと考えています。誰かが似たようなテストをして、このテストや他のテストをするために使用するスクリプトを持っていますか?夜間ジョブが実行された後に発生する可能性のある問題を確認するDatawarehouseのテスト

select 
    t.name table_name, 
    s.name schema_name, 
    sum(p.rows) total_rows 
from 
    sys.tables t 
    join sys.schemas s on (t.schema_id = s.schema_id) 
    join sys.partitions p on (t.object_id = p.object_id) 
where p.index_id in (0,1) 
group by t.name,s.name 
having sum(p.rows) = 0; 

答えて

0

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 
関連する問題