【发布时间】:2015-05-07 12:58:19
【问题描述】:
我有以下动态 SQL 查询,用于过滤数据范围的结果。如果我的“createdFrom”和“createdTo”日期不为空,我会在我的选择语句中添加一个 where 子句。
我有两个问题:
你会怎么做呢?我的逻辑对吗?
-
当我添加以下代码时,我目前收到一条错误消息,我为什么会收到这个?:
将字符串转换为 smalldatetime 时转换失败 数据类型。
Declare @createdFromDate SMALLDATETIME = NULL ,
@createdToDate SMALLDATETIME = NULL
IF @createdFromDate IS NOT NULL
BEGIN
SELECT @sWhere = @sWhere + 'AND g.CreatedOn > '+@createdFromDate
END
IF @createdToDate IS NOT NULL
BEGIN
SELECT @sWhere = @sWhere + ' AND g.CreatedOn <'+@createdToDate
END
【问题讨论】:
-
您使用的是什么版本的 SQL Server?
-
应避免使用动态 SQL,因为它们容易受到 SQL 注入攻击。在不可能的情况下,请尝试将 smallDateTime 转换为 char 数据,然后再将它们连接到 @sWhere。
-
g.CreatedOn是什么数据类型?