web-dev-qa-db-ja.com

結果をCSVとしてSSMSの* with *ヘッダーとして保存

SQL Server 2008 R2では、結果をCSVとして保存するとヘッダーがありません。 「ヘッダー付きコピー」を使用してコピーして貼り付けるか、ヘッダーを取得してCSVなどに貼り付けることでこれを回避できますが、これを行うためのより良い方法はありますか?

13
Kyle Brandt

SSMSでは、いくつかのオプションを変更する必要があります。

ツール-オプション-クエリ結果-SQLサーバー-グリッド(またはテキスト)への結果-> 結果をコピーまたは保存するときに列ヘッダーを含める

変更された設定は新しいクエリウィンドウに適用されますが、既存のクエリウィンドウには適用されません。

22
Marian

[〜#〜] ssms [〜#〜]で解決策を探しているとあなたがはっきりと言ったようですしかし、私はそれが役立つ場合に備えてPowerShellソリューションを提供すると思いました(SQLPSはSSMS 2008および2008 R2の内部からアクセス可能です)。

SQLPS(またはSQLコマンドレットスナップインを備えた通常のPowerShell)を使用して、次のようなものを実行できます。

Invoke-Sqlcmd -Query "sp_databases" -ServerInstance "LocalHost\R2" |
Export-Csv -Path "C:\temp\MyDatabaseSizes.csv" -NoTypeInformation

興味があれば、この例を続けることができます。

PowerShellスクリプトアプローチがお好きな方のために、私は PowerShell経由でSSMSからCSVにエクスポートする というスクリプトを用意しています。これまでのところ、動的SQLスクリプトを作成できるのが好きです。なんでもテキストを選択でき、SSMSがそれを引数としてスクリプトに渡します。

唯一の欠点は、現在のウィンドウの接続を渡すための巧妙な方法が見つからないことです。私の現在の回避策は、接続文字列のみが異なるさまざまなツールを設定することです(つまり、PROD_DW、PROD_DB、TEST_DW ...)。

3
billinkc

Union all joinを実行して、実際の行に対して結合された単一の行選択として列ヘッダーを明示的に追加できます。次に例を示します。

SELECT 'col1' AS col1... 
UNION ALL 
SELECT T.col1... 
FROM TABLE T

このアプローチの最大の問題は、2番目の選択で文字データ型に強制キャストすることです。

1
Phillip Senn