일or놀이/MS-SQL

SELECT 문장의 실행 결과를 PDF 파일로

TIGERJUNE 2006. 9. 5. 14:25

SELECT 문장의 실행 결과를 PDF 파일로 저장하는 스크립트가 있습니다. 오래전에 나온 것인데, 여기서 한번 소개하고자 합니다. SELECT 문장의 실행 결과를 PDF 파일로 출력할 경우는 그리 많아 보이지는 않지만, 혹시나 리포팅 결과를 다운로드 받을때 쓰일 수 있을 것 같네요..

가장먼저 해 주어야할 일은 PDF 파일로 저장할 쿼리를 담고 있을 테이블을 만드는 것입니다. 아래 쿼리를 실행하면 됩니다.

CREATE TABLE psopdf (code NVARCHAR(80))

그리고 아래 주소에서 SQL2PDF 저장 프로시저 코드를 다운로드 받아서 그대로 실행시켜 줍니다.

http://www.sqlservercentral.com/columnists/mivica/sql2pdf.txt

이제 준비는 완료되었고, psopdf  테이블에 원하는 SELECT 문장을 넣어주고 SQL2PDF 저장 프로시저를 실행시키면 됩니다. 2가지 예제를 통해 결과를 살펴보겠습니다.

예제1

INSERT psopdf(code) SELECT SPACE(60) + 'COMPANY LTD'
INSERT psopdf(code) SELECT SPACE(60) + 'COMPANY ADDRESS'
INSERT psopdf(code) SELECT SPACE(60) + 'STREET NAME & No'
INSERT psopdf(code) SELECT ' '
INSERT psopdf(code) SELECT SPACE(34) + 'BILL OF SALE'
INSERT psopdf(code) SELECT ' '
INSERT psopdf(code) SELECT 'Product' + SPACE(10) + 'Quantity'
+ SPACE(10) + 'Price' + SPACE(10) + 'Total'
INSERT psopdf(code) SELECT REPLACE(SPACE(56), ' ', '_')
INSERT psopdf(code) SELECT 'Product1' + SPACE(9) + '10.00 '
+ SPACE(10) + '52.30' + SPACE(10) + '5230.0'
INSERT psopdf(code) SELECT 'Product2' + SPACE(9) + '2.00 '
+ SPACE(10) + '10.00' + SPACE(10) + ' 20.0'
INSERT psopdf(code) SELECT REPLACE(SPACE(56), ' ', '_')
INSERT psopdf(code) SELECT SPACE(50) + '5250.0'

INSERT 쿼리들을 모두 실행시키고 아래처럼 SQL2PDF 저장 프로시저를 실행합니다.

EXEC sql2pdf 'demo2'

실행 결과는 C:\ 폴더의 demo2.pdf 에서 확인할 수 있습니다.


예제2

두번재 예제에서는 pubs 데이터베이스를 이용합니다. 아래 쿼리를 실행하여 주십시오.

USE pubs
INSERT psopdf(code) SELECT t1.au_lname + ' ' + t1.au_fname + ' ' + t1.phone
  +
' ' + t1.address + ' ' + t1.city + ' ' + t1.state + ' ' + t1.zip FROM
authors t1, authors t2

INSERT 쿼리를 실행한 후 아래처럼 SQL2PDF 저장 프로시저를 실행하면 C:\ 폴더에 demo1.pdf가 생성됩니다.

EXEC sql2pdf 'demo1'

지금까지 소개한 방법은 SQL Server 2000과 2005에서 모두 사용가능합니다. 다만, SQL Server 2005에서는 노출영역 구성을 통해 xp_cmdshell 확장 프로시저와 OLE 자동화가 활성화 되어 있어야 합니다.

출처 : http://www.sqlservercentral.com/columnists/mivica/creatingapdffromastoredprocedure.asp

출처 : http://www.sqlmania.net/board/article.asp?boardid=13&idx=3