Существует ли элегантный способ отправки результатов запроса непосредственно на физический принтер?

14

Я получил этот странный запрос, чтобы запланировать отчет и распечатать его на принтере .

Сам отчет довольно прост и помещается на одной странице. Я могу распечатать его в текстовом формате, и это будет просто прекрасно (хотя я открыт для предложений по лучшему продукту).

Вот код Оно работает. Но мне это не нравится. В частности, я хотел бы покончить с вложенными @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
Джеймс
источник

Ответы:

36

Выполнить запрос с помощью POWERSHELLи OUT-PRINTER

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

Командлет Out-Printer отправляет выходные данные на принтер по умолчанию или на альтернативный принтер, если он указан.

Скотт Ходжин
источник
4
Он работал как по волшебству, тот же код можно сократить до: Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printer Я запланировал это как работу и бац. Спасибо за вашу помощь!
Джеймс