안녕하세요.
분산트랜잭션을 사용할려고 합니다. 그런데 아래와 같은 메시지가 뜨내요? 많은 조언 부탁드립니다.
메시지 7391, 수준 16, 상태 2, 프로시저 test_emc_opd_insert_sync, 줄 43
연결된 서버 "TEST_DB"의 OLE DB 공급자 "Sybase.ASEOLEDBProvider"이(가)분산 트랜잭션을 시작할 수 없으므로 요청한 작업을 수행할 수 없습니다.
세부사항
OS : 윈도우 2003 서버 입니다.
DB : SQL Server 2005
목적 : SQL Server 2005 -> (sybase.ASEOLEDBProvider) -> Sybase12.5 DTC
프로그램을 이용하여 데이터를 가져올려고 합니다.
Sybase ASE Error 코드 목록에서는 7391 내역이 없습니다.
7391내역은 SQL Server2005에서 나타나는것 같습니다.
트리거 내용
1. SQL Server 2005에서 트리거를 생성한다.
2. 트리거내의 정보
2-1) Select (Sybase ASE)에 접속하여 해당테이블을 조회한다.
2-1) 조회한 데이터 값이 있을경우는 상관 없지만 없을경우에는
3-3) SQL Server 2005에서 (Sybase ASE)DB로 데이터 값을 인서트한다는 내용 입니다.
=======================================================================
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[test_emc_opd_insert_sync]
on [dbo].[CAD_USER_MSTR]
AFTER INSERT
AS
DECLARE @ptnt_no varchar(100) --
,@ptnt_nm varchar(30) --
,@card_type varchar(1) --
,@sex varchar(1) --
,@prsn_no char(13) --
,@fst_iss_ymd char(8) --
,@last_mod_dt datetime --
,@tmpsql1 varchar(1000) --
,@tmpsql2 nvarchar(1000)
,@tmprowcnt int
SELECT @ptnt_no = PTNT_NO
,@ptnt_nm = PTNT_NM
,@card_type = CARD_TYPE
,@sex = SEX
,@prsn_no = PRSN_NO
,@fst_iss_ymd = FST_ISS_YMD
,@last_mod_dt = LAST_MOD_DT
FROM Inserted
--SET XACT_ABORT ON
--BEGIN DISTRIBUTED TRAN
SET @tmpsql1 = 'SELECT * FROM OPENQUERY(TEST_DB,''SELECT PTNT_NO FROM CAD_USER_MSTR WHERE PTNT_NO = ' + @ptnt_no + ''')'
EXEC (@tmpsql1)
SET @tmprowcnt = @@rowcount
IF(@tmprowcnt = 0)
BEGIN
SET @tmpsql2 = ' INSERT OPENQUERY(TEST_DB,''SELECT PTNT_NO, PTNT_NM, CARD_TYPE, SEX, PRSN_NO, FST_ISS_YMD, LAST_MOD_DT FROM CAD_USER_MSTR WHERE 1=0'') '
+' VALUES('+@ptnt_no+','''+@ptnt_nm+''',NULL,'''+@sex+''','''+@prsn_no+''','''+@fst_iss_ymd+''',getdate()) '
EXEC (@tmpsql2)
--select @@SERVERNAME
END
--COMMIT TRAN
--SET XACT_ABORT OFF
|