我的存储过程调用API,该API生成可消耗的数据视图。我需要将生成的视图中的记录插入本地表。
到目前为止,程序如下所示。
[vw_OriginalView_Temp]
LocalTable
。该表没有任何主键。插入和更新以及跳过重复项的条件
跳过 - 如果本地表中存在具有CustomerGatcaStatusId, AccessNumber, AscertainMethodID, ExtendedStatusId, LastModifiedDate, LastModifiedBy, LastReviewedBy
精确组合的记录。
更新 - 如果存在具有CustomerGatcaStatusId, AccessNumber, AscertainMethodID, ExtendedStatusId
精确组合的记录,则使用视图LastModifiedDate, LastModifiedBy, LastReviewedBy
中的值更新vw_OriginalView_Temp
的值
INSERT - 如果CustomerGatcaStatusId, AccessNumber, AscertainMethodID, ExtendedStatusId
表格中尚未存在Local
的任何组合。
如果您需要进一步说明,请建议并随时发表评论。感谢您的帮助。
ALTER PROCEDURE [dbo].[StoredProcedure1]
AS
BEGIN
DECLARE @return_value INT,
@RetCode INT,
@RunID,
@IntraDayID INT
SET @RunID = NULL
SET @IntraDayID = NULL
EXEC @return_value = [Staging].[API_GenerateTempView]
@SchemaName = N'XXXX',
@ViewName = N'vw_OriginalView',
@ColumnList = N'CustomerGatcaStatusId, AccessNumber, AscertainMethodID, ExtendedStatusId, LastModifiedDate, LastModifiedBy, LastReviewedBy',
@OrderByList = NULL,
@ResultSet = 1,
@RunID = @RunID,
@IntraDayID = @IntraDayID,
@RetCode = @RetCode OUTPUT
INSERT INTO LocalTable(CustomerGatcaStatusId, AccessNumber, AscertainMethodId, ExtendedStatusId, LastModifiedDate, StatusCode, LastModifiedBy, LastReviewedBy)
SELECT
CustomerGatcaStatusId, AccessNumber, AscertainMethodId,
ExtendedStatusId, LastModifiedDate, '11', LastModifiedBy, LastReviewedBy
FROM
[XXXX].[vw_OriginalView_Temp]
--IF EXISTS (SELECT * FROM AeoiSdtTemp)
--BEGIN
-- DELETE FROM AeoiSdtTemp
--END
END
答案 0 :(得分:0)
插入
之类的东西怎么样?UPDATE _Local
SET _Local.c = _Temp.c, _Local.d = _Temp.d
FROM LocalTable _Local
left outer join TempTable _Temp on _Temp.a = _Local.a and _Temp.b = _Local.b and _Temp.c = _Local.c and _Temp.d = _Local.d
where _Temp.a is not null and _Temp.b is not null and _Temp.c IS NULL and _Temp.d IS NULL
和更新
X1.Name X1.ID X1.Prac X1.SCD
未经测试但我想你明白了吗?
对于插入,执行左外连接并测试NULL会检查是否存在与此条件匹配的现有记录 对于更新,我们使用相同的机制,但有时确保NULL,有时为NOT NULL,以确保我们有一个部分匹配的记录