Có một cách thanh lịch để gửi kết quả truy vấn trực tiếp đến một máy in vật lý?


14

Tôi đã nhận được yêu cầu kỳ lạ này để có một báo cáo được lên lịch và in ra máy in .

Bản báo cáo khá đơn giản và sẽ phù hợp trên một trang. Tôi có thể in nó ra một txt và điều đó sẽ ổn (mặc dù tôi sẵn sàng để đề xuất về một sản phẩm tốt hơn).

Đây là mã. Nó hoạt động. Nhưng tôi không thích nó. Cụ thể, Id muốn loại bỏ với @bcp và @Query lồng nhau.

Câu hỏi: Có cách nào thanh lịch hơn để làm điều này?

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

Câu trả lời:


36

Thực hiện truy vấn bằng cách sử dụng POWERSHELLOUT-PRINTER

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

Lệnh ghép ngắn Out-Printer sẽ gửi đầu ra đến máy in mặc định hoặc tới một máy in thay thế, nếu được chỉ định.


4
Nó hoạt động như ma thuật, cùng một mã có thể rút ngắn thành: Invoke-Sqlcmd -Query "SELECT * từ dba..test_data;" | Máy in ra tôi đã lên lịch cho nó như một công việc và bam. Cảm ơn bạn đã giúp đỡ!
James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.