Apakah ada cara yang elegan untuk mengirim hasil permintaan langsung ke printer fisik?

14

Saya mendapat permintaan aneh ini agar laporannya dijadwalkan dan dicetak ke printer .

Laporan itu sendiri cukup sederhana, dan akan muat dalam satu halaman. Saya dapat mencetaknya ke txt dan itu akan baik-baik saja (meskipun saya terbuka untuk saran tentang produk yang lebih baik).

Ini kodenya. Berhasil. Tapi saya tidak suka itu. Secara khusus, Id ingin menghapus @bcp dan @SQL bersarang.

Pertanyaan: Apakah ada cara yang lebih elegan untuk melakukan ini?

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
sumber

Jawaban:

36

Jalankan permintaan menggunakan POWERSHELLdan OUT-PRINTER

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

Cmdlet Out-Printer mengirimkan output ke printer default atau ke printer alternatif, jika ada yang ditentukan.

Scott Hodgin
sumber
4
Ini berfungsi seperti sulap, kode yang sama dapat disingkat menjadi: Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printer Saya menjadwalkannya sebagai pekerjaan dan bam. terima kasih atas bantuan Anda!
James