如何解决将WHERE逻辑转换为SQL语句
| 有人可以帮助我将以下代码转换为原始SQL语句吗? (不适用于动态SQL)Dim blnAllow as Boolean = True
Dim intType as Int32 = 35
.Append(\"SELECT * FROM TABLE1 WHERE NAME=\'AAA\' \")
Select Case intType
Case 35
.Append(\"AND (Type IN (2,4) OR type=8) \")
.Append(\"AND [use]=1 \")
Case 34
If blnAllow = True Then
.Append(\"AND (Type IN (2,4) OR (type=8 and Col1 > 0 )) \")
Else
.Append(\"AND (Type IN (2,4)) \")
End If
.Append(\" AND [use]=1 \")
Case Else
.Append(\"AND Type=1\")
End Select
解决方法
好吧,因为
intType
被定义为35,所以只有Case 35部分适用...
select * from TABLE1 where [NAME]=\'AAA\'
and [Type] in (2,4,8)
and [use] = 1
如果要封装其他情况,则必须说明intType适合的位置。还是只需要3个单独的查询?
, 这样的事情怎么样
SELECT *
FROM TABLE1 WHERE NAME=\'AAA\'
AND (
(
intType = 35
AND (Type IN (2,4) OR type=8)
AND [use]=1
)
OR
(
intType = 34
AND (
(
blnAllow = \'true\'
AND (Type IN (2,4) OR (type=8 and Col1 > 0 ))
)
OR
(
blnAllow = \'false\'
AND (Type IN (2,4))
)
)
AND [use]=1
)
OR
(
intType NOT IN (35,34)
AND Type=1
)
)
, 一般的转换模式是
If condition Then ands1
Else ands2 End If
变成
( (condition AND ands1) OR ((NOT condition) AND ands2) )
, 请尝试最优化的查询。
select * from table where name = \'AAA\' AND
(
(
((Type IN (2,4) OR type=8) OR // Case 35
(
(Type IN (2,4) OR (type=8 and Col1 > 0 )) // Case 34 and blnAllow checking
)
)
AND [use]=1 // Case 35 && 34
) OR
(Type=1) // Else
)
If the string \"Type\" and \"type\" indicates the same field,You just modifify the
//case 35 section to (Type IN (2,4) OR type=8) => (Type IN (2,8))
, 在MS SQL中,如下所示:
DECLARE @blnAllow BIT
SET @blnAllow = 1
DECLARE @intType INT
SET @intType = 35
SELECT *
FROM TABLE1
WHERE
NAME = \'AAA\' AND
(
(@intType = 35 AND (Type IN (2,4) OR type = 8) AND [use] = 1) OR
(@intType = 34 AND [use] = 1 AND
(
(@blnAllow = 1 AND (Type IN (2,4) OR (type = 8 and Col1 > 0 ))) OR
(@blnAllow = 0 AND (Type IN (2,4)))
)) OR
(@intType not in (34,35) AND Type = 1)
)
不要期望查询优化器对其进行优化:)。
, …
WHERE NAME = \'AAA\'
AND (@intType NOT IN (34,35) AND Type = 1
OR @intType IN (34,35) AND [use] = 1 AND (
Type IN (2,4)
OR @intType = 35 AND Type = 8
OR @intType = 34 AND (@blnAllow = 0 OR Type = 8 AND Col1 > 0)
)
)
假设@intType
是int
参数,@blnAllow
是bit
参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。