2009-11-11 3 views
2

특정 조건을 충족하는 SQL Server 테이블에 행을 삽입하면 CSV 형식의 Windows OS 플랫 파일에 기록되도록 트리거를 작성해야합니다.SQL Server 트리거에서 CSV에 행 작성하기

이렇게 할 수있는 xp_cmdshell을 실행하지 않은 명령이 있습니까?

답변

1

BCP (Bulk Copy Program)를 사용하여 CSV 파일을 만듭니다. 예를 들어

다음
BCP master..sysobjects out c:\sysobjects.txt -c -t, -T –S<servername> 

CSV 파일을 생성하기위한 BCP 명령의 기본 형식은 다음과 같이

BCP 아웃

여기에 사용 된 스위치는 :

-c를 기본 필드 종결 자 (탭) 및 행 종결 자 (crlf)를 사용하여 ASCII로 출력 "

-t 필드 종결 자 w 무시 iith ","

-T 신뢰할 수있는 연결을 사용합니다. 여기

declare @sql varchar(8000) 

select @sql = 'bcp master..sysobjects out 
c:\bcp\sysobjects.txt -c -t, -T -S'+ @@servername 

exec master..xp_cmdshell @sql 

사용하는 방법에 대한 설명이다 : -U & -P가

-S 명령 여기

을 실행하기 위해 서버에 접속 아이디/패스워드를 이용 될 수있다 또 다른 예이다 BCP : http://msdn.microsoft.com/en-us/library/ms162802.aspx

3

대신 SSIS로 예약 된 프로세스를 수행하지 않을 이유가 있습니까?

거래율에 따라 입력 한 모든 레코드에 대한 평가 및 가능한 내보내기를 의미하기 때문에이 값을 트리거에 넣는 것을 주저합니다. 높은 주파수를 얻으면 발에서 몸을 쏠 수 있습니다 ...

비록 거래율이 상당히 낮더라도 실제 기록이 오래 걸리는 경우 블로킹/잠금과 같은 문제가 발생할 수 있습니다. 가능한 몇 가지 오류 클래스 (파일 입출력 오류, 쓰기 실패는 트리거 실패, 삽입 실패 등을 나타냄).

일정이 잡힌 프로세스에서는 트리거가 자주 발생하는 동안 테이블을 잠그지 않는 경우가 종종 있습니다.

+0

SSIS는 한 가지 방법 일뿐입니다. 열쇠는 여기에 방아쇠에 넣지 않을 것입니다 ... – jeffa00

+0

나는 방아쇠에 관해서 동의합니다. SSIS에 관해서는, 우리가하려는 것을 위해 항상 작동하지 않는 몇 가지 이유가있을 것입니다. 그것은 입안에 몇 번 나쁜 맛을 남겼습니다. – Sean

+0

그래, 그래서 그 주석을 붙였다. SSIS는 일품에 좋고 다른 사람들에게는 좋지 않습니다. 그것은 여러 차례에 걸쳐 쓴 뒷맛을 남겼습니다. 일반적으로 꽤 좋은 수출. – jeffa00

관련 문제