Esiste un modo elegante per inviare i risultati della query direttamente a una stampante fisica?


14

Ho questa strana richiesta di programmare e stampare un rapporto su una stampante .

Il rapporto stesso è piuttosto semplice e si adatta a una singola pagina. Posso stamparlo su un txt e andrà bene (anche se sono aperto a suggerimenti su un prodotto migliore).

Ecco il codice. Funziona. Ma non mi piace. In particolare, mi piacerebbe eliminare il @bcp e @SQL nidificati.

Domanda: esiste un modo più elegante per farlo?

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

Risposte:


36

Eseguire la query utilizzando POWERSHELLe OUT-PRINTER

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

Il cmdlet Out-Printer invia l'output alla stampante predefinita o a una stampante alternativa, se specificata.


4
Funzionava come per magia, lo stesso codice può essere abbreviato in: Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printer L'ho programmato come lavoro e bam. Grazie per l'aiuto!
James,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.