我有一个存储过程在表中插入,其中日期介于实际日期减1和该表中已存在的最大日期之间:
SELECT @DateMax = MAX(Date) FROM Table6
SET @SQLCommand = 'SELECT c.One, e.Two, e.Three, a.Four, d.Five, a.Time
FROM Table1 a
INNER JOIN Table2 b ON a.column1 = b.column1
INNER JOIN Table3 c ON b.column2 = c.column2
INNER JOIN Table4 d ON a.column3 = d.column3
INNER JOIN Table5 e ON a.column4 = e.column4
WHERE a.Time > ' + @DateMax + ' AND a.Time <= ' + GETDATE()-1 + ' '
INSERT INTO Table6 (One, Two, Three, Four, Five, Time)
EXEC sp_executesql @SQLCommand
当使用参数(@Delete)等于1运行SP时,将插入数据,因为2017-01-01&#39;而不是从表6的最大日期开始:
IF @Delete= 1
BEGIN
DELETE FROM Table6
SET @DateMax = '2017-01-01'
END
问题是,当参数@Delete等于1时,我必须插入&#39; 2017-01-01&#39;之间的所有记录。并且实际日期减去1但包含当天的记录2017-01-01&#39; (&gt; =)但是如果Delete等于0,那么我在Table6的最大日期和实际日期减1之间插入记录但是 NOT INCLUDE 具有Table6的最大日期的记录
我有一个解决方案:
IF @DateMax = '2017-01-01'
BEGIN
SET @Operator = '>='
END
ELSE
BEGIN
SET @Operator = '>'
END
然后在WHERE子句中:
WHERE a.Time' + @Operator + ' ' + @DateMax + ' AND a.Time <= ' + GETDATE()-1 + ' '
但这很难看,不漂亮而且效率不高......
编辑:我的问题是,是否有比我更好的解决方案。