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
语句产生的值与其他内容进行比较。谢谢!你说得对。这就是我没有测试代码的原因。这次代码应该可以工作了,我添加了我之前应该添加的关注点。