Existe-t-il un moyen élégant d'envoyer directement les résultats des requêtes à une imprimante physique?

14

J'ai cette étrange demande d'avoir un rapport planifié et imprimé sur une imprimante .

Le rapport lui-même est assez simple et tient sur une seule page. Je peux l'imprimer sur un txt et ce sera très bien (même si je suis ouvert aux suggestions sur un meilleur produit).

Voici le code. Ça marche. Mais je n'aime pas ça. Plus précisément, j'aimerais supprimer les @bcp et @SQL imbriqués.

Question: Existe - t-il une manière plus élégante de procéder?

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
la source

Réponses:

36

Exécutez la requête à l'aide de POWERSHELLet OUT-PRINTER

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

L'applet de commande Out-Printer envoie la sortie à l'imprimante par défaut ou à une autre imprimante, le cas échéant.

Scott Hodgin
la source
4
Cela fonctionnait comme par magie, le même code peut se raccourcir en: Invoke-Sqlcmd -Query "SELECT * from dba..test_data;" | Out-Printer Je l'ai planifié comme un travail et bam. Merci de votre aide!
James