插入 CASE 函数时 SQL 代码不会运行?
Posted
技术标签:
【中文标题】插入 CASE 函数时 SQL 代码不会运行?【英文标题】:SQL code won't run when CASE function is inserted? 【发布时间】:2021-12-30 19:38:13 【问题描述】:我正在尝试将 CASE 函数放入一些 SQL 代码中,但无法使其运行。在 CASE 函数之前,一切都运行良好,每当插入该函数时,都会出现调试错误。我在制作这个程序时得到了帮助,所以我希望这只是一个我不知道的简单错误。这是根据满足条件从 2 个大型 Excel 表中提取选择内容。 CASE 函数确定一个值是 > 还是
见下面的代码:
Dim fPath As String
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim sPath As String, rng1 As Range, rng2 As Range, SQL As String
fPath = ThisWorkbook.FullName 'workbook must be saved somewhere...
'connect to the workbook on disk
oConn.Open "Driver=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb);" & _
"DBQ=" & fPath & ";"
'select some records which match between lists (zipccode and subdivision)
' and with the entered criteria (price, SQFT)
SQL = " select n.*, o.* from [OldList$] o, [NewList$] n " & _
" where n.zipcode = o.zipcode and left(n.Subdivision, 6) = left(o.Subdivision, 6)" & _
" and (n.listprice - o.listprice) between " & shtCriteria.Range("C4").Value & " and " & shtCriteria.Range("D4").Value & _
" and (n.sqft - o.sqft) between " & shtCriteria.Range("C6").Value & " and " & shtCriteria.Range("D6").Value & _
" and CASE " & _
" WHEN n.lot > 12000 " & _
" THEN o.lot between n.lot + n.lot* " & shtCriteria.Range("C8").Value & " and n.lot + n.lot* " & shtCriteria.Range("D8").Value & " " & _
" ELSE (n.lot - o.lot) between " & shtCriteria.Range("C9").Value & " and " & shtCriteria.Range("D9").Value & _
" END "
Set oRS = oConn.Execute(SQL) 'run the query
【问题讨论】:
Case 不是一个函数,它是一个表达式。您的案例表达式格式不正确,您需要查看特定 RDBMS 的文档。理想情况下,编辑您的问题以包含 actual SQL 语句,而不是动态构造它的代码。并查看Bad habbits to kick 改用括号和 AND/OR 逻辑运算符? 还考虑使用参数(以及 SQL 中的?
占位符)而不是连接未经验证的输入(如果单元格包含意外值、错误或..一些 SQL 语句怎么办?);您将调用 ADODB.Command
实例的 Execute
方法,而不是直接关闭连接。
谢谢大家,我试试看。仍在尝试在这里学习基础知识。欣赏它
【参考方案1】:
CASE
根据条件返回相同类型的不同结果。它不是用于执行您尝试的替代代码块。
删除CASE
并使用OR
和AND
。
你是这样使用它的:
WHERE …
AND CASE
WHEN n.lot > 12000
THEN <condition 1>
ELSE <condition 2>
END
改成:
WHERE …
AND (
(n.lot > 12000 AND <condition 1>)
OR
(n.lot <= 12000 AND <condition 2>)
)
【讨论】:
谢谢,我试试看以上是关于插入 CASE 函数时 SQL 代码不会运行?的主要内容,如果未能解决你的问题,请参考以下文章