クエリ結果を物理プリンターに直接送信するエレガントな方法はありますか?


14

レポートをスケジュールしてプリンターに印刷するというこの奇妙な要求を受けました。

レポート自体は非常にシンプルで、1ページに収まります。私はそれをtxtに印刷することができ、それはうまくいきます(私はより良い製品に関する提案を受け入れていますが)。

コードは次のとおりです。できます。しかし、私はそれが好きではありません。具体的には、ネストされた@bcpと@SQLを廃止したいと思います。

質問:これを行うよりエレガントな方法はありますか?

declare @filepath varchar(255),
@filename varchar(255),
@filetype varchar(255),
@sql nvarchar(max),
@coverpage_text nvarchar(max)

set @filepath = 'C:\users\jmay\documents\'
SET @filename = 'TestFile'
set @filetype = '.txt'

--output to txt
set @sql = N'declare @bcp varchar(4000)
set @bcp = ''bcp " select * from test_data " queryout ' 
+ @filepath +  @filename + @filetype + ' -t " - " -c -T -d DBA''
print @bcp

EXECUTE master.dbo.xp_cmdshell @BCP'

print @sql
 exec sp_executesql @sql

--print data
 set @sql = N'declare @bcp varchar(4000)
set @bcp = ''START /MIN NOTEPAD /P ' + @filepath +  @filename +  @filetype + '''
print @bcp

EXECUTE master.dbo.xp_cmdshell @BCP'

print @sql
exec sp_executesql @sql

回答:


36

POWERSHELLおよびOUT-PRINTERを使用してクエリを実行します

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance .   | Out-Printer

Out-Printerコマンドレットは、既定のプリンターまたは代替プリンター(指定されている場合)に出力を送信します。


4
それは魔法のように機能し、同じコードは次のように短縮できます:Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printerジョブとバムとしてスケジュールしました。ご協力いただきありがとうございます!
ジェームズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.