SQL存储过程中日期中的动态运算符

时间:2018-04-18 09:50:25

标签: sql sql-server tsql stored-procedures ssms

我有一个存储过程在表中插入,其中日期介于实际日期减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 + ' '

但这很难看,不漂亮而且效率不高......

编辑:我的问题是,是否有比我更好的解决方案。

0 个答案:

没有答案