有没有一种优雅的方式将查询结果直接发送到物理打印机?

Jam*_*mes 14 sql-server

我有一个奇怪的要求,要安排报告并将其打印到打印机

报告本身非常简单,可以放在一个页面上。我可以将它打印到 txt 中,这样就可以了(尽管我愿意接受关于更好产品的建议)。

这是代码。有用。但我不喜欢。具体来说,我想取消嵌套的@bcp 和@SQL。

问题:有没有更优雅的方法来做到这一点?

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
Run Code Online (Sandbox Code Playgroud)

Sco*_*red 37

使用执行查询POWERSHELLOUT打印机

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance .   | Out-Printer
Run Code Online (Sandbox Code Playgroud)

Out-Printer cmdlet 将输出发送到默认打印机或备用打印机(如果已指定)。

  • 它像魔术一样工作,相同的代码可以缩短为: Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printer 我把它安排为一项工作和 bam。感谢您的帮助! (4认同)