T-SQL - 在 where 和子句中使用参数
T-SQL - Using a parameter in where and clause
我想传递一个参数,并根据它的值来评估这样的条件:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
DECLARE @Operation INTEGER = 0;
WITH CTEMycte AS
(
SELECT
Table1.Field1,
Table1.Field2,Table1.Field3
FROM
Table1
WHERE
Table1.Field2 = 1
)
SELECT Field1
FROM CTEMycte
WHERE somecondtion
AND
CASE WHEN @Operation = 0 THEN [CTEMycte].[Field3] >= 100
WHEN @Operation = 1 THEN [CTEMycte].[Field3] <= 100
WHEN @Operation = 2 THEN [CTEMycte].[Field3] = 100
END
你不能在THEN
之后有条件。你可以使用OR
:
WHERE somecondtion
AND (
(@Operation = 0 AND [CTEMycte].[Field3] >= 100)
OR
(@Operation = 1 AND [CTEMycte].[Field3] <= 100)
OR
(@Operation = 2 AND [CTEMycte].[Field3] = 100 )
)
或者,您可以在 WHEN
部分组合条件:
WHERE somecondtion AND
(CASE WHEN @Operation = 0 AND [CTEMycte].[Field3] >= 100 THEN 1
WHEN @Operation = 1 AND [CTEMycte].[Field3] <= 100 THEN 1
WHEN @Operation = 2 AND [CTEMycte].[Field3] = 100 THEN 1
ELSE 0
END) = 1
我想传递一个参数,并根据它的值来评估这样的条件:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
DECLARE @Operation INTEGER = 0;
WITH CTEMycte AS
(
SELECT
Table1.Field1,
Table1.Field2,Table1.Field3
FROM
Table1
WHERE
Table1.Field2 = 1
)
SELECT Field1
FROM CTEMycte
WHERE somecondtion
AND
CASE WHEN @Operation = 0 THEN [CTEMycte].[Field3] >= 100
WHEN @Operation = 1 THEN [CTEMycte].[Field3] <= 100
WHEN @Operation = 2 THEN [CTEMycte].[Field3] = 100
END
你不能在THEN
之后有条件。你可以使用OR
:
WHERE somecondtion
AND (
(@Operation = 0 AND [CTEMycte].[Field3] >= 100)
OR
(@Operation = 1 AND [CTEMycte].[Field3] <= 100)
OR
(@Operation = 2 AND [CTEMycte].[Field3] = 100 )
)
或者,您可以在 WHEN
部分组合条件:
WHERE somecondtion AND
(CASE WHEN @Operation = 0 AND [CTEMycte].[Field3] >= 100 THEN 1
WHEN @Operation = 1 AND [CTEMycte].[Field3] <= 100 THEN 1
WHEN @Operation = 2 AND [CTEMycte].[Field3] = 100 THEN 1
ELSE 0
END) = 1