有人可以帮我将以下代码转换为原始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
答案 0 :(得分:1)
因为intType
被定义为35,所以只有案例35部分适用...
select * from TABLE1 where [NAME]='AAA'
and [Type] in (2,4,8)
and [use] = 1
如果你想封装那些其他情况,你必须解释intType适合的位置..或者你只想要3个单独的查询?
答案 1 :(得分:1)
这样的事情
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
)
)
答案 2 :(得分:0)
一般转换模式是
If condition Then ands1
Else ands2 End If
变为
( (condition AND ands1) OR ((NOT condition) AND ands2) )
答案 3 :(得分:0)
在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)
)
不要指望查询优化器对其进行优化:)。
答案 4 :(得分:0)
请尝试这个最优化的查询。
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,4,8))
答案 5 :(得分:0)
…
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
参数。