Czy istnieje elegancki sposób wysyłania wyników zapytania bezpośrednio do fizycznej drukarki?

14

Mam tę dziwną prośbę o zaplanowanie raportu i wydrukowanie go na drukarce .

Sam raport jest dość prosty i zmieści się na jednej stronie. Mogę wydrukować go na txt i będzie dobrze (chociaż jestem otwarty na sugestie dotyczące lepszego produktu).

Oto kod. To działa. Ale mi się nie podoba. W szczególności chciałbym pozbyć się zagnieżdżonych @bcp i @SQL.

Pytanie: Czy jest na to bardziej elegancki sposób?

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
James
źródło

Odpowiedzi:

36

Wykonaj zapytanie za pomocą POWERSHELLi OUT-PRINTER

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

Polecenie cmdlet Out-Printer wysyła dane wyjściowe do drukarki domyślnej lub do drukarki alternatywnej, jeśli jest określona.

Scott Hodgin
źródło
4
Działa jak magia, ten sam kod można skrócić do: Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printer Zaplanowałem to jako zadanie i bam. dzięki za pomoc!
James