【发布时间】:2018-09-19 11:54:18
【问题描述】:
我的存储过程调用了一个 API,该 API 生成了一个可使用的数据视图。我需要将生成视图中的记录插入到本地表中。
到目前为止,过程如下所示。
- 生成的消耗品视图是
[vw_OriginalView_Temp] - 需要插入数据的本地表是
LocalTable。此表没有任何主键。
插入和更新以及跳过重复项的条件
SKIP - 如果本地表中存在与
CustomerGatcaStatusId, AccessNumber, AscertainMethodID, ExtendedStatusId, LastModifiedDate, LastModifiedBy, LastReviewedBy精确组合的记录。-
更新 - 如果存在与
李>CustomerGatcaStatusId, AccessNumber, AscertainMethodID, ExtendedStatusId精确组合的记录,则使用来自视图vw_OriginalView_Temp的值更新LastModifiedDate, LastModifiedBy, LastReviewedBy的值 插入 - 如果
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
【问题讨论】:
-
您可能会发现 MERGE 语句很有用:technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx
-
@pm_2 确切地说,我相信合并语句会很有用,只是想弄清楚它。
标签: sql sql-server stored-procedures insert-update sql-merge