我想将一个表的内容复制到同一个数据库中的另一个表。
为此我在源表上写了触发器,它在AFTER INSERT UPDATE上触发,表中有2个uniqueidentifier字段,它们根据newid()生成默认绑定值。基于这个uniqueidentifier我正在检查记录是否存在于目标表上(如果存在)然后它将更新,如果不存在则将数据集插入表中。
问题是,当我插入新记录时,INSERTED in trigger会为uniqueidentifier字段提供NULL值。 在可能的情况下,只有一行是更新或插入,因此不使用游标。
下面是我的代码,我在@OriginalTable_MoveDataUID和@OriginalTable_ProcedureUID中获取空值。 MoveDataUID和ProcedureUID都是uniqueidentifier fileds。
请分享您的想法或任何替代方案。
ALTER TRIGGER [dbo].[spec_ref_movedata_procedures_ToUpdate]
ON [dbo].[spec_ref_movedata_procedures]
AFTER INSERT, UPDATE
AS
BEGIN
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRANSACTION
DECLARE @OriginalTable_MoveDataUID NVarchar (100)
DECLARE @OriginalTable_ProcedureUID NVarchar (100)
DECLARE @PresentInHistoryYesNo int
SELECT @OriginalTable_MoveDataUID= MoveDataUID,@OriginalTable_ProcedureUID=ProcedureUID FROM INSERTED
-- inserted for checking purpose
INSERT INTO ERP_Test_NK_spec_ref_movedata_procedures_history_2 (MovedataUID,ProcedureUID) VALUES
(@OriginalTable_MoveDataUID,@OriginalTable_ProcedureUID)
SELECT @PresentInHistoryYesNo = count(*) from spec_ref_movedata_procedures_history WHERE MoveDataUID=@OriginalTable_MoveDataUID AND ProcedureUID=@OriginalTable_ProcedureUID
IF @PresentInHistoryYesNo = 0
BEGIN
-- insert opertions
print 'insert record'
END
ELSE IF @PresentInHistoryYesNo = 1
BEGIN
-- update opertions
print 'update record'
END
COMMIT TRANSACTION
SET XACT_ABORT OFF
END
答案 0 :(得分:0)
您可以这样做,而不是使用变量:
INSERT INTO ERP_Test_NK_spec_ref_movedata_procedures_history_2 (MovedataUID,ProcedureUID)
SELECT MoveDataUID,ProcedureUID FROM INSERTED