2016-04-01 24 views
0

DB内のテーブルを別のファイルにエクスポートする必要があります。各テーブルのSQL Server Management Studioでエクスポートウィザードを実行する代わりに、これを行うためのより迅速な方法はありますか?データはパイプで区切られた形式にする必要があります。 solutionが見つかりましたが、データをプルしません。テーブル定義のみです。SQLテーブルを別々のパイプ区切りファイルに簡単にエクスポートする方法はありますか?

+0

エクスポートしたいですすべてのテーブルをCSVファイルに変換しますか? – SQLChao

+0

いいえ、パイプで区切られたファイルには、テーブルごとに1つのファイルが別個にあります。 –

+0

あなたはおそらくPowershellからこれを行うことができます – dfundako

答えて

1

これは1つの方法です。あなたは区切りファイルパイプにエクスポートするために文書化されていないsp_msforeachtableとbcpを使用するとxp_cmdshellを

-- To allow advanced options to be changed. 
EXEC sp_configure 'show advanced options', 1; 
GO 
-- To update the currently configured value for advanced options. 
RECONFIGURE; 
GO 
-- To enable the feature. 
EXEC sp_configure 'xp_cmdshell', 1; 
GO 
-- To update the currently configured value for this feature. 
RECONFIGURE; 
GO 

を有効にすることができます。

EXECUTE sp_msForEachTable 
    'EXECUTE master.dbo.xp_cmdshell ''bcp "SELECT * FROM ?" queryout D:\Data\?.txt -t "|" -c -T -S ServerName\InstanceName''' 

これが動作し、あなたはそれが(この上で読むことがたくさんがあります)に活用することができるよう、それはまだ有効されなかった場合は、xp_cmdshellを無効ことを確認したいと思います。また、必要な場所にファイルを書き込む権限があることを確認してください。

+0

それは優れた解決策です+1。 – alas

+0

ありがとう! –

+0

@SQLChao、bcpのドキュメントhttps://msdn.microsoft.com/en-us/library/ms162802.aspxを見ていますが、出力ファイルの最初の行に列名を含めるパラメータオプションがありますか?ありがとう。 –

0

bcp(ここではhttps://msdn.microsoft.com/en-us/library/ms162802.aspxと表示)を使用して、デリミタにパイプを使用するエクスポート形式を指定できます。唯一の欠点は、毎回テーブル名を指定する必要があるため、おそらくテーブル名でリストを作成し、次にpowershellスクリプトを使用してリストをループしてbcpを実行する必要があるということです。

0

私はまた@SQLChaoが彼の溶液中で指摘したようにsp_configureのがxp_cmdshellを設定されていると仮定すると、助けた次のが見つかりました:

Execute sp_MSforeachtable 
    'Execute master.dbo.xp_cmdshell ''sqlcmd -S DATABASE -E -d mydb -q "SET NOCOUNT ON SELECT * FROM ?" -W -o C:\TEMP\?.bak -s "|"''' 

を出力ファイル内の列名の下にダッシュを削除するには:

Execute sp_MSforeachtable 
    'Execute master.dbo.xp_cmdshell ''findstr /R /C:"^[^-]*$" c:\temp\?.bak > c:\temp\?.txt''' 

最後に、作成した.BAKファイルを削除:

Execute master.dbo.xp_cmdshell 'del c:\temp\*.bak' 
関連する問題