我在存储过程中有以下示例动态SQL,参数是链接服务器和我通过以下过程连接的数据库:
CREATE PROC [dbo].[DateTest]
@LINKED_SERVER_NAME nvarchar(max),
@DATABASE_NAME nvarchar(max)
AS
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRAN
DECLARE @SQL varchar(max)
SELECT @SQL = 'SELECT [TEST], [DATE_TIME_1], [DATE_TIME_2]
FROM [' + @LINKED_SERVER_NAME + '].[' + @DATABASE_NAME + '].[dbo].[EXAMPLE_TABLE]'
EXEC (@SQL)
COMMIT
我正在尝试使用DATE_TIME_1值获取过去24小时的记录。将此添加到上面是没有问题的:
WHERE DATE_TIME_1 >= DateAdd(hh, -24, GETDATE())
但是,有时,我应该为此子句使用的日期是DATE_TIME_2。这种情况是DATE_TIME_1为NULL。
总之,如果DATE_TIME_1不为null,请查看它是否在过去24小时内发生。如果DATE_TIME_1为null,请使用DATE_TIME_2作为参数,以查看它是否在过去24小时内发生。我遇到的问题是我对如何在上面写入IF条件感到遗憾。
答案 0 :(得分:1)
添加案例陈述:
....
WHERE case when DATE_TIME_1 is null then DATE_TIME_2 Else DATE_TIME_1 End >= DateAdd(hh, -24, GETDATE())
或
特定于SQL Server:
WHERE IsNull(DATE_TIME_1, DATE_TIME_2) >= DateAdd(hh, -24, GETDATE())