web-dev-qa-db-ja.com

SQL Serverデータ検証のベストプラクティス

SQL Server 2014にインポートしたいCSVファイルがあります。ファイルの各レコードには約20の列があり、各列はデータ型のコンプライアンスと列ごとの他のチェック(最小/最大範囲、null)について検証する必要があります/ null以外)。

これを効率的に行うためのモデルアーキテクチャに関するアドバイスを探しています。 SSISといくつかのエラーテーブルを使用すると、一度に1つの列しかチェックできず、エラー処理(特にSSISでの列のロックアップはせいぜい扱いづらい)のように見えるため、少し非効率に思えます。

各レコードを処理し、すぐにそのレコードに含まれるすべてのエラーの概要を確認して、インポート用のデータを提供する人々にすべての問題のフィードバックを一度に提供できるようにしたいと思います。

5
nojetlag

実際、SSISは、宣伝しているように見えるすべての処理能力のデータをインポートすることに関しては不格好です。コメンターの1人、Kin氏は、一時テーブルを作成することにそれが正しかったと信じています。以下は、コンプライアンスのために解析されるデータをExcelから一時テーブルに直接インポートするために使用するコードです。以下の例でわかるように、T-SQLを使用して、OPENROWSETはExcelスプレッドシートのSQL Serverインスタンスの詳細と呼ばれる特定のタブを読み取り、データをSQLテーブルTempServerMapにインポートします。

その後、データが一時テーブルにインポートされ、オプションの世界が広がります。各列に必要なすべてのSQLビジネスルールが含まれている別のテーブルにデータを挿入できます-適格でないデータを除外します-これは必ずしも「最良の方法」ではなく、エラーを見つけるプロセスを最初に微調整する際の最小量のコード。不良リンゴ(行)をキャッチして後で確認できるように、ここでエラー処理を制御する必要があります。または、事前にデータをチェックしてビジネス要件に準拠していることを確認する関数、手順、トリガー、または上記のすべてを作成することもできます。

これらのエラーを他の人に伝えたい場合は、新しいエラーテーブルをクエリするSSRS(Reporting Services)レポートを作成し、レポートを表示するための適切なアクセス許可を与えるだけです。 Webベースであり、イントラネット環境で簡単にアクセスできます。外部の従業員がいる場合は、SSRSからレポートを電子メールで簡単に送信できます。

ここでの主なポイントは、データをExcelからSQL Serverに移して、効果的に操作できるようにすることです。

一部のDBAは、以下のコードのreplace/execで気分を害する場合があります。その場合は、選択ステートメントを特定のExcelファイル名でハードコードするだけです。

declare  @cmdstring varchar(8000) ='select * into SQLSunSet.dbo.TempServerMap from OPENROWSET (''Microsoft.Ace.OLEDB.12.0'', ''Excel 12.0;Database=<MapsExcelFile_SQLServerUsageTracker>'', ''select * from [SQL Server Instance Details$]'')'
set @cmdstring = replace(@cmdstring,'<MapsExcelFile_SQLServerUsageTracker>',@MapsExcelFile_SQLServerUsageTracker)

if exists (select * from sysobjects where type ='u' and name ='TempServerMap') drop table TempServerMap

        --print (@cmdstring)
     exec (@cmdstring)

多くの人々は、T-SQLをコーディングしないことを期待してSSISに目を向けているようです。しかし、私は通常、SSISが障害のある4輪駆動のようであることに気付きます。それはあなたがずっとずっとずっとずっとずっとそうであったであろうよりもあなたがもっと動けなくなっただけです。

追伸OPENROWSETを効果的に使用するには、Microsoft Accessデータベースエンジン2010再頒布可能パッケージ(実際には、MS Accessだけでなく、Microsoft Office Engine)をインストールする必要があります。こちらからダウンロードできます:

https://www.Microsoft.com/en-us/download/details.aspx?id=13255

さらに、OPENROWSETを実行するようにSQL Serverを構成し、インストール後に次のコードを使用してT-SQL内でOfficeエンジンを使用する必要がある場合があります。

exec sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
GO

exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO 
3
Sting