SELECTクエリの結果をcsvファイルに書き込む必要があります。 SQL Server 2008 r2でT-SQLを使用してどのように実行できますか? SSISで実行できることは知っていますが、いくつかの理由により、このオプションはありません。
以下の記事で推奨されるprocを使用しようとしましたが、procを実行すると、このprocで呼び出されるsys.sp_OACreateおよびsys.sp_OADestroyを実行できないというSQLのエラーメッセージが表示されます。
これらのコンポーネントを有効にする方法、またはT-SQLを使用してファイルに書き込むより良い方法を知っていますか?
前もって感謝します。
使用 BCPユーティリティ
bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" queryout "D:\MyTable.csv" -c -t , -S SERVERNAME -T
-c
引数は、SQLのネイティブバイナリ形式ではなく、c文字出力を指定します。これはデフォルトでタブで区切られた値になりますが、-t ,
はフィールドtの改行文字をカンマに変更します。 -T
はWindows認証を指定します( "trusted connection")、それ以外の場合は-U MyUserName -P MyPassword
を使用します。
デフォルトでは、列ヘッダーはエクスポートされません。ヘッダーにはUNION ALLを使用する必要があります
OR
SQLCMDを使用する
SQLCMD -S SERVERNAME -E -Q "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable"
-s "," -o "D:\MyData.csv"
OR
Powershellを使用する
これが 記事へのリンク です。最終的にこれを使用する場合は、-notype
の後にExport-Csv $extractFile
を追加して、出力ファイルの不要な列を取り除くことができます。
アクションを自動化するのに役立つ前の回答に追加します。必要な場合に限り、Management Studioで実行できますヘッダーを右クリック-名前を付けて保存-> .csvを選択ファイル。
または、実行する選択ステートメントごとにそれを行う場合は、結果の出力方向をファイルに変更できます。 ツール->オプション->クエリ結果-ファイルへの結果を使用します。
簡単に自動化でき、SSISを利用するもう1つの方法は、Management Studioのデータのエクスポート機能を使用することです。 データベースを右クリック->タスク->データのエクスポートそこには多くのオプションを持つウィザードがあります。ソースデータベース、宛先、その他のオプションを選択する必要があります。保存先については、「フラットファイル」であることを確認し、.csvタイプを参照して選択し、必要なフォーマットを選択します。最後に、ローカルに保存して必要に応じて繰り返すことができるSSISパッケージを取得します。
T-SQLを使用する
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
ただし、注意点がいくつかあります。
ローテクですが...
select
col1 + ','
+ cast(col2 as varchar(10)) + ','
+ col3
from mytable;
すでに受け入れ可能な解決策があるように見えますが、db mailがセットアップされている場合は、次のようなことを行うことができます。
EXEC msdb.dbo.sp_send_dbmail
@recipients='[email protected]',
@subject='CSV Extract',
@body='See attachment',
@query ='SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable',
@attach_query_result_as_file = 1,
@query_attachment_filename = 'CSV_Extract.txt',
@query_result_separator = ',',
@query_result_header = 1
とにかくどこかにファイルを電子メールで送信している場合は、いくつかの手順を省略できます。
これは、3つのステップのプロセスで簡単に実行できます。
クエリをSELECT INTO
クエリとして記述します。これは基本的にクエリ結果をテーブルにエクスポートします。
Select
Field1
,Field2
,Field3
INTO dbo.LogTableName --Table where the query Results get logged into.
From Table
このタイプのクエリは実行の一部としてテーブルを作成する必要があるため、このテーブルcannotはクエリの実行時に存在します。
次に、SSISを使用して、そのテーブルの結果を.csv
にエクスポートします。 SSISエクスポートウィザードでは、区切り文字などを選択できます。これは、|を使用するのに非常に便利です。結果セットにコンマが含まれる場合の区切り文字。
DB Name > Tasks > Export Data
を右クリック
エクスポートが完了したら、DROP TABLE
コマンドを実行してログテーブルをクリーンアップします。
Drop Table dbo.LogTableName
MS Access DoCMDを使用して、SQL ServerからCSVをエクスポートします。それは単一のコマンドでそれを行うことができます。アクセスデータベースは、アクセスコマンドを有効にするためにのみ使用されます。これはうまく機能し、追加の利点(理由は不明)として、エクスポートされたテーブルのschema.iniを作成します。
アダム
CMD="SELECT * INTO [Text;HDR=Yes;DATABASE=C:\].[Results.txt]
FROM [ODBC;DSN=SQL2017;Description=SQL2017;UID=.;Trusted_Connection=Yes;APP=Microsoft Office 2013;WSID=LAPTOP-XYZ;DATABASE=TempDB_DataDump_1].Results "
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "anyAccessdatabase.mdb"
' appAccess.DoCmd.SetWarnings 0
appAccess.DoCmd.runsql "CMD"