2

SQL Server データベースに定期的に取り込む必要がある大きな Excel ファイル (多くの場合、それぞれ 100 MB を超える) がいくつかあり、このプロセスを自動化するオプションを探しています。

Microsoft は Businesss Intelligence Development Studio (BIDS) のサポートを終了し、SQL Server Data Tools - Business Intelligence (SSDT-BI) と呼ばれるものに置き換えたようです。

このため、私のオプションは SSDT-BI または SSIS パッケージのようですが、どちらを使用すればよいかわかりません。誰かがこれらの 2 つのソリューションについて少し情報を提供できますか? この問題の解決策を見つけるためのアドバイスをいただければ幸いです。

4

2 に答える 2

0

これは古い投稿であり、SSISやSSDTとは何の関係もないことは知っていますが、OPは利用可能な他のオプションについて問い合わせているようです。そのため、これらのツールを使用せずに抽出ファイルをインポートする簡単な方法を探している人のために、これを追加したいと思いました. 抽出ファイル (CSV、Access、Excel、FoxPro など) からデータをインポートする必要がある文字通り何百ものプロセスを作成しました。以下は、Excel スプレッドシートのすべてのシートをロードしてから単純に表示する Powershell スニペットです。データグリッドのコンテンツですが、ロジックを簡単に追加して、たとえばデータをテーブルにインポートできるはずです。建設的な批判はいつでも大歓迎です!

Clear-Host;
    ## You May Need to Download and Install the Microsoft Access Database Engine 2010 Redistributable: https://www.microsoft.com/en-us/download/details.aspx?id=13255

[String]$ExcelPath = "C:\Temp\TestSheet.xlsx";
[String]$TargetServer = "(local)";
[String]$TargetDatabase = "TestDB";

[String]$SourceConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=YES';" -f $ExcelPath;
[String]$TargetConnectionString = "Data Source={0};Initial Catalog={1};Trusted_Connection=True;" -f $TargetServer, $TargetDatabase;

$SourceFactory = [System.Data.Common.DbProviderFactories]::GetFactory("System.Data.OleDb");
$TargetFactory = [System.Data.Common.DbProviderFactories]::GetFactory("System.Data.SqlClient");

    $SourceConnection = $SourceFactory.CreateConnection();
        $SourceConnection.ConnectionString = $SourceConnectionString;
        $SourceConnection.Open();

    $SourceCommand = New-Object $SourceFactory.CreateCommand();
        $SourceCommand.Connection = $SourceConnection;
        $SourceCommand.CommandTimeout = [Int32]::MaxValue;

    $TargetConnection = $TargetFactory.CreateConnection();
        $TargetConnection.ConnectionString = $TargetConnectionString;
        $TargetConnection.Open();

    $TargetCommand = New-Object $TargetFactory.CreateCommand();
        $TargetCommand.Connection = $TargetConnection;
        $TargetCommand.CommandTimeout = [Int32]::MaxValue;

foreach($table in $SourceConnection.GetSchema("Tables").Rows){
    try{
            ## Source
                [String]$TabName = $table["TABLE_NAME"];
                [String]$sqlString = "SELECT * FROM [{0}];" -f $TabName;

                $SourceCommand.CommandText = $sqlString;

                [System.Data.Common.DbDataReader]$SourceDataReader = $SourceCommand.ExecuteReader();
                $dtData = New-Object System.Data.DataTable;
                    $dtData.Load($SourceDataReader);

            ## Target -- Bulk Insert data
                if($dtData.Rows.Count -gt 0){
                    $TabName = "[{0}]" -f $TabName;
                    $sqlBulkCopy = New-Object System.Data.SqlClient.SqlBulkCopy($TargetConnection);
                    $sqlBulkCopy.DestinationTableName = $TabName;

                    foreach ($Column in $dtData.Columns){
                        $sqlBulkCopy.ColumnMappings.Add($column, $column)
                    };

                    $sqlBulkCopy.WriteToServer($dtData);
                }
       }catch{
            $table["TABLE_NAME"];
            $_.Exception.Message;
            $_.Exception.ItemName;
        };
};

#Housekeeping
    $sqlBulkCopy.Close();
    $sqlBulkCopy.Dispose();

    $SourceCommand.Dispose();
    $SourceDataReader.Dispose();
    $SourceConnection.Close();
    $SourceConnection.Dispose();

    $TargetCommand.Dispose();
    $TargetDataReader.Dispose();
    $TargetConnection.Close();
    $TargetConnection.Dispose();

    $TargetConnection.Close();
    $TargetConnection.Dispose();
    [System.GC]::Collect();
于 2019-08-28T23:58:39.333 に答える
-1

d/cb/n SSIS と SSDT は終了しませんが、SSIS は SSDT のコンポーネントの 1 つです。SSDT には SSIS、SSRS、および SSAS が含まれていることを意味します。

于 2019-08-28T22:45:19.330 に答える