2018年12月31日月曜日

SQL Server の Import Export Wizard によるデータのExport

SQL Server のBCPコマンドによるデータエクスポート の投稿でBCPコマンドを使ってTableデータをファイルに書き出す方法を説明している。
今回は、SQL Server のタスクに標準で備わっているデータエクスポートの機能を使ってTableデータをファイルに出力してみる。

環境

  • DB: SQL Server 2012 SP4 (11.0.7001.0 (X64)) Evaluation or Express
  • データソース: AdventureWorksLT2012
  • データ保存先:ローカル ファイル(テキスト ファイル)
AdventureWorksLT2012 の SalesLT.Customer のデータをファイルに出力する。

Import/Export WizardによるデータExport

SSMSを起動しオブジェクトエクスプローラーからAdventureWorksLT2012を右クリック→タスク→データのエクスポート を選択する。

enter image description here



SQL Server インポートおよびエクスポート ウィザード
・ようこそ

enter image description here


・データソースの選択
認証:Windows認証
データベース:AdventureWorksLT2012

enter image description here


・変換先の選択
※データベース:AdventureWorksLT2012 の照合順序(SQL_Latin1_General_CP1_CI_AS) に対応したコードページを選択すること!! (コードページの選択を誤ると実行時にエラーになる)

コードページの例(抜粋)
Identifier .NET Name Additional information
1252 windows-1252 ANSI Latin 1; Western European (Windows)
932 shift_jis ANSI/OEM Japanese; Japanese (Shift-JIS)
65001 utf-8 Unicode (UTF-8)
51932 euc-jp EUC Japanese

※ファイル名に出力先のファイルのフルパスを設定する。
ディレクトリを予め作成していること。

enter image description here


・テーブルコピーまたはクエリの指定

enter image description here


・フラットファイル変換先の構成
※元データとして SalesLT.Customer テーブルを選択する。
区切りは規定値を使用する。

enter image description here


・パッケージの保存および実行
設定内容をすぐに実行するか、SSISパッケージとして再利用可能なように保存するかを選択できる。
→ SSISパッケージとして保存できるのは、Evaluation または Standard以上の商用ライセンスの場合のみ。
今は「すぐに実行」を選択する。
※以下図は、Evaluation または Standard以上の商用ライセンスの場合

enter image description here


※Developer または Express等の無償ライセンスの場合

enter image description here


・ウィザードの完了
設定内容の概要を確認します。

enter image description here


・操作の完了
エラー無く処理が完了すると下図のような結果が表示されます。

enter image description here


・出力結果

enter image description here

コードページの選択エラー

上記例では元データとして AdventureWorksLT2012 を使用している。
AdventureWorksLT2012 の照合順序は SQL_Latin1_General_CP1_CI_AS であるため、対応したコードページとして「1252 (ANSI - ラテンI)」を選択しなければならないと説明している。
ここでは敢えてコードページを「932 (ANSI/OEM - 日本語 Shift-JIS)」に設定した場合で実行してみる。

・コードページを「932 (ANSI/OEM - 日本語 Shift-JIS)」に設定

enter image description here


・実行エラーが発生

enter image description here


・エラーメッセージ
→ コードページについて警告されている。

enter image description here


このように元のデータの照合順序と対応しないコードページを設定するとエラーとなり実行出来ない。


SSISパッケージの作成と再利用

上記事例ではExport処理を実施してしまうと操作を再利用することが出来ない。(もう一度ウィザードを始めから設定することになる)
Evaluation または Standard 以上の商用ライセンスの場合はSSISパッケージをファイルとして保存することが出来、コマンドプロンプトまたはPowerShellから実行することが出来る。
今回はEvaluation Editionの環境でSSISパッケージの保存とPowerShellによる実行を試してみる。

・SSISパッケージの保存設定1
保存先としてSQL Server 又はファイルシステムが選択できるが、今回はファイルシステムを選択。
保護レベルとパスワードを設定。

enter image description here


・SSISパッケージの保存設定2
保存先のディレクトリを設定する

enter image description here


・ウィザードの完了
設定内容の概要を確認します。

enter image description here


・操作の完了
エラー無く処理が完了すると下図のような結果が表示されます。

enter image description here


・SSISパッケージの実行
SSISパッケージの実行にはコマンドプロンプトまたはPowerShellでDTEXECコマンドを使用します。
DTEXEC /f “[SSISパッケージの保存パス(.dtsx)]” /Decrypt [パスワード]
※SQL Server をバージョンアップした環境で上記DTEXECコマンドを実行すると以下のエラーが発生します。
エラー: 2018-12-31 05:50:33.59 コード: 0xC0016020 ソース: 説明: エラー
0xC001700A “パッケージに含まれるバージョン番号が無効です。バージョン番号を現在のバージョン番号より大きくすることはできません。”
により、パッケージをバージョン 6 から 3 に移行できませんでした。
上記エラーはDTEXECコマンドに関連付けられているEXEの実体がSQL Server 2012ではない(古いVersion)になっていることが原因のようです。
レジストリを書き換えれば良さそうな気もしますが、SQL Server 2012に対応いたEXEを指定するようにコマンドを記載すれば動作します。

PS C:\Users\hoge> & "C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe" /f  "C:\Temp\Export_Customer.dtsx" /Decrypt hogepin
Microsoft (R) SQL Server Execute Package Utility
Version 11.0.7001.0 for 64-bit
Copyright(C) Microsoft Corporation. All rights reserved.

開始: 5:54:24
進捗状況: 2018-12-3105:54:26.00
   ソース: データ フロー タスク 1
   検証しています: 0% の完了
進捗状況の終了

~

進捗状況: 2018-12-3105:54:26.59
   ソース: データ フロー タスク 1
   クリーンアップ: 100% の完了
進捗状況の終了
DTExec: パッケージの実行から返されました DTSER_SUCCESS (0)。
開始: 5:54:24
完了: 5:54:26
経過時間:  2.059 秒
※EXEのフルパスを指定する場合に「Program Files」のように間にスペースが入るパスを指定する場合は、パス名の前に「&」を追加すること。


まとめ

  • SSISを使ってデータをフラットファイルにExportする場合は、元データの照合順序と出力先のコードページの指定を正しく設定すること。
  • 商用ライセンスではSSISパッケージを保存することが出来る。
  • SSISパッケージを実行する場合は「DTEXEC」コマンドをPowerShell等で実行する。
  • SQL Server のVersionが複数インストールされている環境では、DTEXECコマンドの指定でEXEのフルパスを指定すること。

追記(12/31)
SSISパッケージの保存で「ファイルシステム」ではなく、「SQL Server」を選んだケースを試してみたが、
  • SSMSでIntegration Services にログインして「格納済のパッケージ」ディレクトリの「MSDB」の配下にSSISパッケージが格納されていることを確認。
  • 実行したがエラーとなる。エラー内容から、Edtionの権限が認められていない模様。実行時はEvaluation Edition のインスタンスであったが、同じ環境下にExpress Edition のインスタンスが構築されており、その辺の問題かと。

enter image description here

  • 上記のようにSSISパッケージをSQL Serverに保存したところ、以前の投稿で作成していた統合サービスカタログが初期化されてしまった…
    Import/Export Wizard で作成したSSISパッケージをSQL Serverに保存するのはやめた方が良さそう…

参考

Code Page Identifiers

DTExec.exe を使用してコマンド プロンプトから SSIS パッケージを実行する



SQL ServerのBulk Insertによるデータインポート

テキストファイルのデータを一括でTableにインポートする方法として
Bulk Insertを使ってみる。
AdventureWorksLT2012 の Customer Tableのデータを TestDB (ユーザー定義)のCustomer2 TableにInsertする例を作成する。
前提として、SQL Server のユーザー定義のDB:TestDB に AdventureWorksLT2012 のCustomer Tableと同じデータ型のTable:Customer2 を作成する。

環境

  • SQL Server: SQL Server 2012 SP4 (11.0.7001.0 (X64))
    Evaluation or Express
  • 元データ: AdventureWorksLT2012
  • Import先:TestDB

Import用のTable作成

以下のCreate Table文を[TestDB]で実行する。
USE[TestDB]

IF OBJECT_ID('[dbo].[Customer2]', 'U') IS NOT NULL
  DROP TABLE [dbo].[Customer2]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Customer2](
[CustomerID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[NameStyle] bit NOT NULL,
[Title] [nvarchar](8) NULL,
[FirstName] nvarchar(50) NOT NULL,
[MiddleName] nvarchar(50) NULL,
[LastName] nvarchar(50) NOT NULL,
[Suffix] [nvarchar](10) NULL,
[CompanyName] [nvarchar](128) NULL,
[SalesPerson] [nvarchar](256) NULL,
[EmailAddress] [nvarchar](50) NULL,
[Phone] nvarchar(25) NULL,
[PasswordHash] [varchar](128) NOT NULL,
[PasswordSalt] [varchar](10) NOT NULL,
[rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_Customer_CustomerID] PRIMARY KEY CLUSTERED 
(
[CustomerID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [AK_Customer_rowguid] UNIQUE NONCLUSTERED 
(
[rowguid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

Import用のデータをCSVファイルで作成

AdventureWorksLT2012 のCustomer TableのデータをCSVファイルにBCPコマンドを使って書き出す。(前回の記事を参照
対象のデータに「,」が含まれている場合があるので、安易にカンマ区切りにしないこと。
データの区切り文字は適切に選択する。(今回は「;」を採用)
PS C:\Users\hoge> bcp AdventureWorksLT2012.SalesLT.Customer  out "c:\Temp\Customer.txt" -S 192.168.1.50\SQLEVA -T -c -t";"

コピーを開始しています...

847 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 16     平均 : (52937.50 行/秒)
出力結果

enter image description here

Bulk Insert

SSMSを起動し以下のクエリを実行
USE [TestDB]
TRUNCATE TABLE  Customer2;

BULK INSERT [dbo].[Customer2]
FROM 'c:\Temp\Customer.txt' 
WITH (FIELDTERMINATOR = ';', 
ROWTERMINATOR = '\n');

SELECT @@ROWCOUNT;

SELECT * FROM Customer2;
※WITH句の説明
FIELDTERMINATOR : 列の区切りの指定
ROWTERMINATOR : 行の区切りの指定


実行結果

enter image description here



参考

BULK INSERT (Transact-SQL)

CSV ファイルを BULK INSERT を使ってインポートする


まとめ

  • Bulk Insertのデータ元ファイルはBCPコマンドで出力した場合のデータと同じく1行目からデータ行となっていること(列名のヘッダを含まない)。
  • 列の区切り文字は文字列データに含まれない文字を使うこと(若しくは置換しておく)

2018年12月30日日曜日

SQL Server のBCPコマンドによるデータエクスポート

SQL Server 2012 でBCPコマンドを使ったデータエクスポートの手順をまとめる。
BCPコマンドの仕様詳細は以下のリンクを参照。
bcp ユーティリティ
bulk copy program ユーティリティ (bcp) では、 Microsoft SQL Server のインスタンスと、ユーザー指定の形式のデータ ファイルとの間でデータの一括コピーを行います。 bcp
ユーティリティを使うと、多数の新規行を SQL Server テーブルにインポートしたり、データをテーブルからデータ
ファイルにエクスポートしたりできます。 このユーティリティでは の知識は必要ありません。ただし、 queryout
Transact-SQLオプションと同時に使う場合はその知識が必要になります。
データをテーブルにインポートするには、そのテーブル用に作成されたフォーマット
ファイルを使用するか、テーブルの構造およびテーブルの列に有効なデータの型を理解しておく必要があります。
このようにBCPコマンドを使ってデータをDBにInsertしたり、DBからデータを取り出したり出来ます。
今回は、DBから指定のテーブルデータをテキストファイルに出力するサンプルを作成します。

環境

  • DB: SQL Server 2012 SP4 (11.0.7001.0 (X64)) Evaluation or Express
  • データソース: AdventureWorksLT2012
  • データ保存先:ローカル ファイル(テキスト ファイル)
※BCPコマンドはEXPRESSでも使用できる。

サンプル1

AdventureWorksLT2012 のAddressテーブルのデータをテキストファイルに書き出します。
DB:AdventureWorksLT2012 (Evaluation)
Table:Address

Power Shell 実行内容
PS C:\Users\Hoge> bcp AdventureWorksLT2012.SalesLT.Address  out "c:\Temp\Address.txt" -S 192.168.1.50\SQLEVA -T -c -t","

コピーを開始しています...

450 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 1      平均 : (450000.00 行/秒)

使用したオプション(大文字/小文字の区別がある)
コマンド 説明
out 出力するファイルのフルパス
-S [ServerName][Instanse Name]
-T Windows認証の場合に指定
-c 文字データとして処理する場合に指定
-t 列の区切りを指定

出力結果
※先頭行に列名が入らないことに注意

enter image description here

SQLEXPRESSの場合でも実行できる
PS C:\Users\Hoge> bcp AdventureWorksLT2012.SalesLT.Address  out "c:\Temp\Address_EXP.txt" -S hego-pc\SQLEXPRESS -T -c -t","

コピーを開始しています...

450 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 1      平均 : (450000.00 行/秒)

サンプル2

AdventureWorksLT2012 のAddressテーブルに対するSELECTクエリの結果をテキストファイルに書き出します。
DB:AdventureWorksLT2012 (Evaluation)
Table:Address

SELECTクエリ:
SELECT * FROM AdventureWorksLT2012.SalesLT.Address WHERE City = 'London'

Power Shell 実行内容
PS C:\Users\hoge> bcp " SELECT * FROM AdventureWorksLT2012.SalesLT.Address WHERE City = 'London' " queryout "c:\Temp\Address_query.txt" -S 192.168.1.50\SQLEVA -T -c -t","

コピーを開始しています...
14 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計 : 1 平均 : (14000.00 行/秒)

使用したオプション(大文字/小文字の区別がある)
コマンド 説明
queryout 出力するファイルのフルパス
-S [ServerName][Instanse Name]
-T Windows認証の場合に指定
-c 文字データとして処理する場合に指定
-t 列の区切りを指定

※SELECTクエリを使ってデータを抽出する場合は書き出すファイルのコマンドを「out」ではなく「queryout」を指定する。

出力結果
※先頭行に列名が入らないことに注意

enter image description here

まとめ

BCPコマンドを使ってSQL Server のデータをテキストファイルに出力するサンプルを作成してみました。
さらに細かい設定は「format」指定をしてXMLのフォーマットファイルに指定できる模様です。
SSMSの結果をコピペでEXCELに貼ることしかやったことありませんでしたので勉強になりました…
使うか?と言われると微妙。

参考

bcp ユーティリティ

bcp ユーティリティを使用した一括データのインポートとエクスポート (SQL Server)

【SQL Server】bcpを使用したインポートとエクスポート




SSISプロジェクトを統合サービスカタログへ配置

前回の投稿 でSSISプロジェクトの作成方法をまとめました。
今回は作成したSSISプロジェクトをSQL Serverの統合カタログに登録しSQL Serverから実行してみたいと思います。

環境

   ※SQL Server はEvaluation又はStandard以上のライセンスが必要です!!
  • データ保存先:ローカル ファイル(テキスト ファイル)

統合サービスカタログの作成

SSISのプロジェクトは「統合サービスカタログ」に配置することが出来る。
まずは、統合サービスカタログの初期設定を行う。
  • SSMSを起動し該当のDBインスタンスで接続する。(192.168.1.50¥SQLEVA)
     ※Windows認証でSSMSにログインすること。
  • SSMSのオブジェクトエクスプローラーから「統合サービス カタログ」を右クリックし「カタログの作成」を選択する。
    フォルダ名を「AdventureWorksLT2012」と設定する。

enter image description here


enter image description here

カタログの作成を行うとオブジェクトエクスプローラーの統合サービスカタログの下に「SSISDB」が作られその下に作成したカタログ名のディレクトリが作成される。

SSISプロジェクトの配置

前回の投稿 で作成したプロジェクトをSQL Server の統合サービスカタログに配置する。
プロジェクトはVisual Studio 2015 で作成しており、SSDTは14.0.61712.50を使用している。この環境設定の場合は既定でSQL Server 2017 に対応している。
SSISプロジェクトを統合サービスカタログに配置するためには、SSISのPackageFormatVersion等のConfig設定が対象のSQL Serverに適合していなければならない。
※配置するまではエラー無く出来るが、SSMSからパッケージを実行するとエラーが発生する。
※手動でConfigを変更するのは難儀…
Visual Studio 2015以降であれば、SSISプロジェクトのプロパティの設定で配置対象のSQL Serverを変更することが出来る。


1. 配置プロジェクトのターゲットバージョンを設定
・プロジェクトのプロパティを選択

enter image description here

・ターゲットバージョンを変更
構成プロパティ→全般から設定出来る。
既定でSQL Server 2017 になっているのを SQL Server 2012 に変更する。

enter image description here


2. パッケージの配置
・プロジェクトメニューから「配置」を選択する。
 →「Integration Services 配置ウィザード」が起動する

enter image description here


・「Integration Services 配置ウィザード」が起動

enter image description here


・配置先を選択
サーバー名と認証を設定し「接続」を選択
※サーバー名:192.168.1.50\SQLEVA
※認証はWindows認証を選択すること

enter image description here


・パスを設定するため、「参照」を選択

enter image description here


・統合サービスカタログの選択
「AdventureWorksLT2012」を選択しOKする。

enter image description here


・設定された配置先情報
入力内容に問題なければ「次へ」

enter image description here


・配置内容の確認
問題が無ければ「配置」を実行

enter image description here


・配置結果

enter image description here

※SQL Server認証で実施すると最後の「プロジェクトを配置しています」でエラーが発生する。
※リモート接続でSQL Server認証にしたからかも…

enter image description here


・配置結果の確認
SSISプロジェクトの配置処理が正常に終了したら、SSMSの統合サービスカタログを確認すると、配置したプロジェクトのディレクトリが作成される。

enter image description here



3. パッケージの実行
Step 2 で配置したSSISプロジェクトのパッケージを実行する。
・SSMSの統合サービスカタログの該当するプロジェクトのディレクトリを展開して「パッケージ」内の「Package.dtsx」を右クリックし「実行」を選択

enter image description here


・パラメータの値を設定
パラメータの値が設定されていない警告が出ているため左のボタンから値を設定する。

enter image description here


enter image description here


enter image description here


パラメータ値の設定をしたら「OK」する。


・実行結果レポートを表示するため「はい」を選択

enter image description here



・実行結果レポート(概要)

enter image description here


・出力データの確認

enter image description here



パッケージの実行エラー
SSISプロジェクトの配置ターゲットバージョンを適切に設定しないと以下のエラーが実行時に発生する。
※配置時にエラーが発生しないので注意!!
・実行結果レポート(エラー発生時)
実行情報の「状態」が「失敗」となる。

enter image description here


・エラー内容例

enter image description here

Package:エラー: エラー 0xC001700A
“パッケージに含まれるバージョン番号が無効です。バージョン番号を現在のバージョン番号より大きくすることはできません。”
により、パッケージをバージョン 8 から 6 に移行できませんでした。
上記エラーはSSISプロジェクトの配置ターゲットバージョンが配置するSQL Serverに対応していないことを示している。
※バージョン 8 : SQL Server 2014 - 2017
※バージョン 6 : SQL Server 2012


参考

What SQL version is my SSIS package? | SQL Studies

SSIS The version number in the package is not valid ? SQLGardner


まとめ

SSISプロジェクトを実装するためのVisual Studio のVersion(正確にはSSDTのVersion) とSSISプロジェクトのターゲットバージョンが関連していることに気が付かず3日くらい「バージョン番号問題」に苦しみました…
それまでVisual Studio 2013で作成しており、ターゲットバージョンの変更が出来ずにConfigの手動書き換えもやってみましたが動かず…
Visual Studio 2015 を導入しプロジェクトのプロパティでターゲットバージョンの変更が出来るようになり解決。
実際にSSISプロジェクトを開発しパッケージを運用する場合は開発環境、運用環境の各Versionに十分に注意する必要がありそうです。





SSISプロジェクトの作成

Integration Services プロジェクトの作成手順を以下にまとめます。

プロジェクト仕様

Queryで取得した結果をテキストファイルに書き出すツールとして作成。
  • 開発環境:VS2015 Community Update 3
  • SQL Server Data Tools:SSDT for VS2015 (14.0.61712.50)
    → SSIS用のプロジェクトを作成するためにはVisual Studioの導入後に対応するSSDTをインストールする必要があります。
    Visual Studio の SQL Server Data Tools (SSDT) をダウンロードし、インストールする
  • データソース: SQL Server 2012 SP4 (11.0.7001.0 (X64))
            AdventureWorksLT2012
  • データ保存先:ローカル ファイル(テキスト ファイル)

実装手順

1. SSIS用の新規プロジェクトを作成
Visual Studio 2015 を起動しファイルメニュー→新規作成→プロジェクトからビジネス インテリジェンスの項目の「Integration Services プロジェクト」を選択する。
enter image description here

プロジェクト名:SSIS_Package_Project1
※プロジェクトの新規作成で「ビジネス インテリジェンス」が見えない場合はSSDTの導入に失敗している可能性が高いです。


2. 新規データフロータスクを作成
・ソリューション エクスプローラーのプロジェクト ツリー内のSSISパッケージ内にある「Package.dtsx」をダブルクリック(or メニューから「ビューデザイナー」を選択)
※新規プロジェクトの起動時にPackage.dtsx のデザイン画面が起動しているハズ。
・Package.dtsx のデザイン画面から「データフロー」を選択する。
画面中央に「新しいデータフロータスクの追加」のリンクがあるのでクリック。

enter image description here


3. 変換元データソースを設定
・追加されたデータフロータスクの画面で左ペインの「変換元アシスタント」をダブルクリック。
enter image description here


・変換元の型を選択
変換元の型:SQL Server を選択して接続先マネージャーの選択で「新規作成」を選択

enter image description here


・変換元のSQL Serverの接続情報を設定

Item Value
プロバイダー SQL Server Native Client 11.0
サーバー名 192.168.1.50¥SQLEVA
認証 Windows認証
データベース名 AdventureWorksLT2012

接続テストで接続情報が正しいことを確認し「OK」すること。

enter image description here


データフロータスクに「OLE DBソース」が作成される。

enter image description here


4. パラメータの登録
クエリでパラメータを使用しない場合は設定不要。
・Package.dtsx のデザイン画面から「パラメータ」を選択する。
・パラメータ画面の左上の「パラメータの追加」を選択する。
・パラメータに下表の内容を設定する。

Item Value
名前 ProductCategoryID
データ型 Int32
5
機微 False
必須 True

enter image description here


enter image description here


5. OLE DBソースの編集
Step 3で作成した「OLE DBソース」をデザイン上で左クリック→編集を選択する。
「OLE DBソース エディター」で以下を設定。
・データアクセスモード: SQLコマンド
・SQLコマンド: 以下のパラメータクエリを張り付ける

enter image description here


パラメータクエリ
SELECT ProductID
 , Name
 , ProductNumber
 , Color
 , StandardCost
 , ListPrice
 , Size
 , Weight
 , ProductCategoryID
FROM SalesLT.Product AS X
WHERE X.ProductCategoryID = ?;

※OLE DBソースの場合はパラメータ化する部分を「?」としておくこと!!。
「OLE DBソース エディター」の「パラメーター」を選択し「クエリ パラメーターの設定」画面を開き設定を行う。

enter image description here


変数項目でStep 4 にて追加したパラメータが選択できる。
※パラメータークエリを使用する場合はOLE DBソースの編集の前にPackageデザインからパラメーターの追加を行うこと。


6. 変換先の追加
・Packageデザインのデータフロータスクの画面で左ペインの「その他の変換先」から「フラットファイル変換先」を選択しデータフローにドラッグ。

enter image description here


enter image description here


7. 変換先の編集
Step 6で作成した「フラットファイル 変換先」をデザイン上で左クリック→編集を選択する
・フラットファイル変換先エディターから「新規作成」を選択する。

enter image description here


・フラットファイル形式は「区切り記号」を選択する。(デフォルト)

enter image description here


・フラットファイル接続マネージャーエディターで以下を設定

Item Value
ファイル名 C:\Temp\SSIS_ProductType.txt
コードページ 1252 (ANSI ? ラテン I)
先頭データ行を列名として使用する チェック

※Cドライブ直下に「Temp」フォルダを作成していること。
※元データである「AdventureWorksLT2012」の照合順序が「SQL_Latin1_General_CP1_CI_AS」となっており、対応するコードページは「1252 (ANSI - ラテンI)」となる。


enter image description here

・フラットファイル変換エディター画面に戻って、「マッピング」を選択しOKを押す。
※変換元データ、変換先情報に編集を加えた場合は必ずマッピング画面を選択してOKすること。

enter image description here


8. 動作確認
変更内容の保存を行い、デバッグを開始する。
正常に終了すればStep 7 で設定したディレクトリにテキストファイルが作成される。

enter image description here


enter image description here

注意点

  • SQL Server はEvaluation若しくはStandard以上の商用ライセンスを使用すること。
  • Visual Studio は2015以降のVersionを使用すること
    → 2015以降でないとVSプロジェクトからターゲットとなるSQL ServerのVersionを変更出来ません。
    ※統合サービスカタログを使用しない場合は気に無くても良い。
  • VS2015のProject内でSQL Serverへの認証を設定する場合はWindows認証を選択すること。→ SQL Server認証ではエラーになる場合はあります。
  • WorkGroup環境では、VS2015をインストールしているPCにSQL Serverをインストールすること。(Remote接続はエラーになります)

まとめ

・変換元、変換先の設定を変えることで色々なデータに対応出来ることがメリットでしょうか。
作成手順が多少わかりずらいのが難点です。
・変換先の設定でコードページの指定がありますが、元データの照合順序に対応したコードを選択する必要があります。