小编cam*_*ech的帖子

如果列存在则条件 WHERE

我有几个表,通常具有可为空的“CreatedDate”和/或“ModifiedDate”日期时间列。我想要一个查询,可以从任何单个表中进行选择,其中一个、两个或都不存在日期时间列,并且每列都BETWEEN提供(单独的)范围。

这是一个粗略的(非工作的)示例。这尝试用来COL_LENGTH确定列是否存在。但是,如果一列不存在,则会引发错误,我相信是因为WHERE仍在评估整个列。

SELECT * FROM tableName
WHERE 1=1 AND
(COL_LENGTH(tableName, 'CreatedDate') IS NULL OR CreatedDate BETWEEN @CreatedFrom AND @CreatedTo) AND
(COL_LENGTH(tableName, 'ModifiedDate') IS NULL OR ModifiedDate BETWEEN @ModifiedFrom AND @ModifiedTo)
Run Code Online (Sandbox Code Playgroud)

这可以通过动态 SQL 来解决。但是,在这种情况下,我仅限于以读取为中心的权限。所以没有 EXEC、CREATE 或 INSERT。

这可以用静态 SQL 实现吗?

示例表

两列:

DECLARE @Table1 table
(
    Id int NOT NULL,
    CreatedDate datetime NULL,
    ModifiedDate datetime NULL
);

INSERT @Table1
    (Id, CreatedDate, ModifiedDate)
VALUES
    (1, NULL, NULL),
    (2, NULL, '20230101 01:23:45.678'),
    (3, '20230101 02:34:56.789', NULL),
    (4, …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

2
推荐指数
1
解决办法
1121
查看次数

标签 统计

sql-server ×1

t-sql ×1