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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.