2

私は、大きくて複数結合されたSELECTステートメントの結果を取得し、クエリ結果をCVSファイルとして電子メールで送信しようとしています。クエリは正しく、電子メールは送信されていますが、結果のCVSファイルとしてのエクスポートを自動化するのに問題があります。私が読んでいることから、クエリ結果を自動エクスポートするための最善の策は、「BCP」と呼ばれるツールです。

ManagementStudioで次のようにBCPを使用しようとしました。

USE FootPrint;

DECLARE @sql VARCHAR(2048);
DECLARE @dir VARCHAR(50);

SET @dir = 'C:\Users\bailey\Desktop';
SET @sql = 'bcp "SELECT TOP 10 * FROM datex_footprint.Shipments" queryout "' + @dir + '" -c -t, -T';

EXEC master..xp_cmdshell @sql;

FootPrintは特定のデータベースの名前であり、datex_footprintはスキーマです。(これは実際のクエリではなく、単なるテストクエリです)。

これを実行すると、次のエラーが発生します: "SQLState = S0002、NativeError = 208" "Error = [Microsoft] [SQL Server Native Client 10.0][SQLServer]無効なオブジェクト名'datex_footprint.Shipments'。"

datex_footprint.Shipmentsが、テストしようとしているデータの正しいスキーマ\テーブルアクセスであることを100%確信しています。

この結果をCSVファイルにエクスポートしようとすると、私が見逃していることや間違っていることを誰かが見ていますか?具体的には、しかし、私はこのプロセスを自動化しようとしています。結果をCSVファイルにエクスポートする方法は知っていますが、T-SQLでエクスポートして、時刻ごとにファイルの生成を自動化できるようにしたいと考えています。

どんな助けでもいただければ幸いです!

4

3 に答える 3

3

[解決済み]

私は自分が間違っていたことを理解しました。ビューを完全な形で識別していませんでした。「database.schema.table/view」の代わりに「schema.Table/View」を使用していました。また、"-S" + @@SERVERNAME フラグを追加しました。これにより、SQL Server が現在接続されているサーバーをクエリに使用するように BCP ユーティリティに指示されます。

T-SQL、SQL Server 2008 で SELECT クエリの結果の CSV ファイルを生成する正しいコードは次のとおりです。

DECLARE @sql VARCHAR(8000);

SELECT @sql = 'bcp "SELECT * FROM FootPrint.datex_footprint.Shipments" queryout "C:\Users\bailey\Desktop\FlatTables\YamotoShipping.csv" -c -t, -T -S' + @@SERVERNAME;

exec master..xp_cmdshell @sql;

そこで、「フットプリント」を追加しました。データベースを識別するために、それはうまくいきました。

注: SQL Server 2008 R2 を実行しています。

于 2012-09-26T15:45:07.457 に答える