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


14

我收到了这个奇怪的请求,要求安排报告并打印到打印机

该报告本身非常简单,可以放在单个页面上。我可以将其打印为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

Answers:


36

使用POWERSHELLOUT-PRINTER执行查询

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

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


4
它就像魔术一样工作,相同的代码可以缩短为:Invoke-Sqlcmd -Query“ SELECT * from dba..test_data;” | 我将Out-Printer安排为作业和作业。谢谢你的帮助!
詹姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.