首页 > 解决方案 > 当参数标记是函数参数时无法派生参数信息

问题描述

在 Excel 中,在数据 > 属性下

数据 - 属性

然后在定义>命令文本下

命令文本

我有一个 SQL 命令文本来生成数据表,但是当我使用以下查询字符串时出现此错误:

SELECT convert(datetime, (?) , 121)

(?) 是我将单元格设置为的参数,=TEXT(BE3,"mm/dd/yyyy")它的datetime值作为我datatype在 SQL Server 中的该列是datetime

在此处输入图像描述

我的完整 sql 命令如下:

SELECT * FROM Student 
WHERE GraduationDate 
BETWEEN
(CASE
     WHEN (GraduationDate  Is Not Null)
     THEN SELECT convert(datetime, (?) , 121)
     ELSE''
END)
AND
(CASE
     WHEN (GraduationDate  Is Not Null)
     THEN SELECT convert(datetime, (?) , 121)
     ELSE''
END)

知道是什么导致这种情况发生吗?

标签: sqlsql-serverexcelvbaexcel-formula

解决方案


你的语法不正确。如果不出意外,子查询需要它们自己的括号。

你似乎想忽略null毕业日期。好吧,这个逻辑就是这样做的:

SELECT s.*
FROM Student 
WHERE GraduationDate BETWEEN convert(datetime, (?), 121) AND convert(datetime, (?), 121);

笔记:

  • 我不鼓励您使用BETWEEN日期/时间值。Aaron Bertrand 很好地解释了原因。
  • 如果您传入参数,它们应该已经是日期/时间值,因此不需要转换。
  • 如果要包含NULL值,请添加OR GraduationDate IS NULL.

推荐阅读