多数の行をコピーし、別の外部テーブルへの関連付けを使用して同じテーブルに挿入するストアド プロシージャ (MS SQL Server 2012) を作成しようとしています。コピーされた行では、更新日と作成日、およびこれらの新しく挿入された行を作成および更新したユーザーも変更します。
主キーに到達するまで、これはすべて正常に機能します。データベースは Sage CRM のものです。これはストアド プロシージャ (eware_get_identity_id) を使用して、挿入先のテーブルの次のプライマリ キー ID を取得します。この eware_get_identity_id ストアド プロシージャは、他のテーブルに対してさまざまな挿入、更新、および削除を行うため、代わりに関数を使用することはできません。データベースの構成を変更することはできないため、列のタイプを 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
明らかに、この方法でストアド プロシージャをインラインで実行することはできません ( (exec [dbo].[eware_get_identity_id] 'Security') as secu_SecurityID )。Sage SP がデータを変更しなかった場合、関数は理想的ですが、変更するため、これはオプションではありません。誰でもこれを行うためのより良い方法を提案できますか? 挿入の直前にデータを取得するために、カーソル、またはおそらく一時テーブルに頼ることを考えましたか? 提案してください。