Sql server SQL Server-带大小写的WHERE子句
Sql server SQL Server-带大小写的WHERE子句,sql-server,Sql Server,CreditMemoNumber是一个varchar列 我想做到这一点: ALTER PROCEDURE GetVendor_RMA_CreditMemo (@HasCreditMemoNo INT) BEGIN SELECT * FROM (SELECT CreditMemoNumber, CASE WHEN CreditMemoNumber != ''
CreditMemoNumber
是一个varchar
列
我想做到这一点:
ALTER PROCEDURE GetVendor_RMA_CreditMemo
(@HasCreditMemoNo INT)
BEGIN
SELECT
*
FROM
(SELECT
CreditMemoNumber,
CASE WHEN CreditMemoNumber != ''
THEN 1
ELSE 0
END AS HasCreditMemoNo
FROM
XYZ) as C
WHERE
(C.HasCreditMemoNo = @HasCreditMemoNo OR @HasCreditMemoNo = -1)
END
这对你有用吗?我不确定这是否能提高你的表现。您最好编写一个
if-else-if-else
语句和三个单独的select语句,并在CreditMemoNumber列上添加索引
CASE
WHEN @HasCreditMemoNo = 0
THEN -- select all rows with no value in CreditMemoNumber Column,
WHEN @HasCreditMemoNo = 1
THEN -- all rows that has some data,
WHEN @HasCreditMemoNo = -1
THEN -- everything regardless..
这对你有用吗?我不确定这是否能提高你的表现。您最好编写一个
if-else-if-else
语句和三个单独的select语句,并在CreditMemoNumber列上添加索引
CASE
WHEN @HasCreditMemoNo = 0
THEN -- select all rows with no value in CreditMemoNumber Column,
WHEN @HasCreditMemoNo = 1
THEN -- all rows that has some data,
WHEN @HasCreditMemoNo = -1
THEN -- everything regardless..
你不能用箱子做这种事 正确的方法是使用或:
ALTER PROCEDURE GetVendor_RMA_CreditMemo(@HasCreditMemoNo int)
BEGIN
select
CreditMemoNumber,
case when CreditMemoNumber != '' then 1 else 0 end as HasCreditMemoNo
from XYZ
where
(@HasCreditMemoNo = 0 and (CreditMemoNumber is null or CreditMemoNumber = ''))
or (@HasCreditMemoNo = 1 and CreditMemoNumber != '')
or (@HasCreditMemoNo = -1)
END
你不能用箱子做这种事 正确的方法是使用或:
ALTER PROCEDURE GetVendor_RMA_CreditMemo(@HasCreditMemoNo int)
BEGIN
select
CreditMemoNumber,
case when CreditMemoNumber != '' then 1 else 0 end as HasCreditMemoNo
from XYZ
where
(@HasCreditMemoNo = 0 and (CreditMemoNumber is null or CreditMemoNumber = ''))
or (@HasCreditMemoNo = 1 and CreditMemoNumber != '')
or (@HasCreditMemoNo = -1)
END
您得到的错误是什么?有什么样的数据和预期的结果吗?你从哪里得到这个号码?你少了一张桌子吗?我更新了我的问题它工作得很好。。。但是我不想使用多个select查询。我一直在寻找Where子句中包含多个案例的任何解决方案。您得到的错误是什么?有什么样的数据和预期的结果吗?你从哪里得到这个号码?你少了一张桌子吗?我更新了我的问题它工作得很好。。。但是我不想使用多个select查询。我在Where子句中寻找任何解决方案,其中包含多个case
case
语句不会生成布尔表达式结果。它们产生价值。您必须将case
语句产生的值与其他内容进行比较。谢谢!你说得对。这就是我没有测试代码的原因。这次代码应该可以运行了,我添加了我之前应该添加的关注点。case
语句不会生成布尔表达式结果。它们产生价值。您必须将case
语句产生的值与其他内容进行比较。谢谢!你说得对。这就是我没有测试代码的原因。这次代码应该可以工作了,我添加了我之前应该添加的关注点。