여러 행을 복사 한 다음 저장 프로 시저 (MS SQL Server 2012)를 만들고 다른 외부에 연결하여 동일한 테이블에 다시 삽입하려고합니다. 표. 복사 된 행에서 updateddate 및 createddate는 물론이 새로운 삽입 된 행을 작성 및 업데이트 한 사용자도 변경합니다.저장 프로 시저의 삽입에서 저장 프로 시저 호출
기본 키가 나올 때까지 모든 것이 정상적으로 작동합니다. 데이터베이스는 Sage CRM의 데이터베이스입니다.이 테이블은 저장 프로 시저 (eware_get_identity_id)를 사용하여 삽입 할 테이블의 다음 기본 키 ID를 가져옵니다. 이 eware_get_identity_id가 저장된 proc은 다른 테이블에 다양한 삽입, 업데이트 및 삭제를 수행하므로 대신 함수를 사용할 수 없습니다. 우리는 데이터베이스의 구성을 변경할 수 없으므로 열의 유형을 Identity 사양으로 변경하는 것도 옵션이 아닙니다.
는 내가하고 싶은 (그리고 내가 할 수없는 알고있는 것은) 아래 같은 것입니다 :.
ALTER PROCEDURE Lead_CopySecuritiesToOpp
@lead_leadID int,
@oppo_opportunityID int,
@user_userID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO Security
(<columns hidden for clarity>,secu_CreatedDate,secu_UpdatedDate,secu_CreatedBy,secu_UpdatedBy,
secu_LeadId, secu_CaseId,secu_SecurityID)
SELECT <columns hidden for clarity>, GETDATE() as secu_CreatedDate, GETDATE() as secu_UpdatedDate, @user_userID as secu_CreatedBy,
@user_userID as secu_UpdatedBy, NULL as secu_LeadId, @oppo_opportunityID as secu_CaseId,
(exec [dbo].[eware_get_identity_id] 'Security') as secu_SecurityID
FROM Security
WHERE (secu_LeadId = @lead_leadID)
END
GO
가 분명 나는이 방법으로 저장 프로 시저를 인라인으로 실행할 수 없습니다 ((간부 인 [DBO] eware_get_identity_id] 'Security')를 secu_SecurityID으로 지정하십시오. Sage SP가 데이터를 변경하지 않았더라도 기능이 이상적 일 수 있으므로 옵션이 아닙니다. 누구든지이 일을하는 더 좋은 방법을 제안 할 수 있습니까? 필자는 삽입하기 전에 커서를 사용하거나 임시 테이블을 사용하여 데이터를 가져 오는 것에 대해 생각해 보았습니다. 제발 제안.
거래를 고려한 적이 있습니까? 삽입/업데이트 등을 수행하는 sprocs를 호출한다고 가정하면 트랜잭션에서 전체 작업을 래핑 할 수 있어야하고 어떤 것이 잘못 될 경우 롤백 할 수 있어야합니다. 그렇다면 신원 생성 함수를 호출하고 무언가 잘못되면 데이터베이스가 일관성이 없다는 가능성없이 두 개의 별도 명령문으로 안전하게 삽입 할 수 있습니다. – Charleh
데이터베이스의 구성을 변경할 수 없다면이'Lead_CopySecuritiesToOpp'를 어떻게 만들거나 변경할 수 있습니까? 저장 프로 시저? 당신이 * 변경할 수/데이터베이스에 추가 할 수있는 것들이 있습니까? – RBarryYoung
흠, 'eware_get_identity_id_range'라는 것을 보셨습니까? 이 문제를 해결하기 위해 작성된 것 같습니다. 여기를 참조하십시오 : https://community.sagecrm.com/user_community/f/84/p/3205/10691.aspx#10691, 게시물은 약 절반 아래로 ... – RBarryYoung