Gibt es eine elegante Möglichkeit, Abfrageergebnisse direkt an einen physischen Drucker zu senden?

14

Ich habe die seltsame Bitte, einen Bericht einzuplanen und auf einem Drucker auszudrucken .

Der Bericht selbst ist ziemlich einfach und passt auf eine einzelne Seite. Ich kann es als txt ausdrucken und das wird in Ordnung sein (obwohl ich offen für Vorschläge für ein besseres Produkt bin).

Hier ist der Code. Es klappt. Aber ich mag es nicht. Insbesondere würde ich gerne die verschachtelten @bcp und @SQL weglassen.

Frage: Gibt es einen eleganteren Weg, dies zu tun?

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
quelle

Antworten:

36

Führen Sie die Abfrage mit POWERSHELLund OUT-PRINTER aus

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

Das Cmdlet "Out-Printer" sendet die Ausgabe an den Standarddrucker oder an einen alternativen Drucker, sofern einer angegeben ist.

Scott Hodgin
quelle
4
Es funktionierte wie von Zauberhand, derselbe Code kann verkürzt werden auf: Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printer Ich habe es als Job eingeplant und bam. danke für Ihre Hilfe!
James