在执行删除和插入之前计算表中的行

时间:2015-02-25 11:49:52

标签: sql

很抱歉,如果对此的答案非常简单,我已经护目镜,找不到它。

我有一份隔夜运行的工作并执行以下操作

delete from [CLOUD].[SAP-Data].TABLE_A

INSERT INTO [CLOUD].[SAP-Data].TABLE_A
select *
    from ACTA.TABLE_B
    where
    EXPIRY_DATE > CONVERT(VARchar(30), GetDate(),102) 

然而,ACTA.TABLE_B中的信息有时没有刷新,并且它不包含正确的记录数。我需要停止

delete and insert into [CLOUD].[SAP-Data].TABLE_A 

在这些场合发生。

当问题发生时,ACTA.TABLE_B中记录的行数将始终低于100,000。

任何帮助都会非常感激。

谢谢 LYNG

2 个答案:

答案 0 :(得分:0)

您可以使用if来控制程序的流程

IF(select count(*) from from ACTA.TABLE_B where
EXPIRY_DATE > CONVERT(VARchar(30), GetDate(),102) ) > 100000
 BEGIN 
delete from [CLOUD].[SAP-Data].TABLE_A
INSERT INTO [CLOUD].[SAP-Data].TABLE_A
select *
from ACTA.TABLE_B
where
EXPIRY_DATE > CONVERT(VARchar(30), GetDate(),102) 
 END 
ELSE 
 BEGIN
PRINT 'BAD DATA Skipping delete and Insert'
 END 

答案 1 :(得分:0)

以下代码可能对您有所帮助

IF ((SELECT COUNT(*) FROM [CLOUD].[SAP-Data].TABLE_A WHERE
EXPIRY_DATE > CONVERT(VARCHAR(30), GETDATE(),102)) > 100000)
BEGIN
    DELETE FROM [CLOUD].[SAP-Data].TABLE_A
    INSERT INTO [CLOUD].[SAP-Data].TABLE_A
    SELECT *
    FROM ACTA.TABLE_B
    WHERE
    EXPIRY_DATE > CONVERT(VARCHAR(30), GETDATE(),102)
END
ELSE
BEGIN
    PRINT 'Data Refreshing Problem'
END

谢谢