sql - 错误 156 严重性 15 状态 1 使用语法 CASE WHEN ELSE END
问题描述
当 @Keyword 从存储过程中声明时,我有新的 WHERE 条件。但是当我尝试 CASE 语法时,出现错误“关键字‘LIKE’附近的语法不正确。”
我在 PostgreSQL 中尝试过这种 CASE 语法,但没有错误。
ALTER PROCEDURE [dbo].[ACC_SEARCH_INVOICE_DATEX]
@projectID varchar(3),
@FromDate DATETIME,
@Todate DATETIME ,
@Filter varchar(50),
@Keyword varchar(50),
@posted int,
@status integer,
@source varchar(50)
AS
SELECT posted, InvoiceHead.InvoiceID, InvoiceHead.Date AS date, InvoiceHead.UserID, InvoiceHead.CreditTerm, InvoiceHead.DueDate, InvoiceHead.CustomerID,
Party.Name, InvoiceHead.Total, InvoiceHead.Currency, InvoiceHead.Rate, Subtotal, Discount, Tax, Commision, Bonus, Total, DownPayment, Balance ,
substring(InvoiceID,4,LEN(invoiceid)-11-3) Source, selling, technician, Lock , InvoiceHead.Status
FROM InvoiceHead LEFT OUTER JOIN Party ON InvoiceHead.CustomerID = Party.PartyID
WHERE
CASE
WHEN @Keyword = 'SCP'
THEN ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%') or (InvoiceHead.InvoiceID LIKE '%SCJ%'))
WHEN @Keyword = 'SCNH'
THEN ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%') or (InvoiceHead.InvoiceID LIKE '%SNJH%'))
WHEN @Keyword = 'SCNHL'
THEN ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%') or (InvoiceHead.InvoiceID LIKE '%SNJHL%'))
ELSE ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%'))
END
ORDER BY InvoiceHead.InvoiceID
解决方案
你应该重构条件:
WHERE
(CASE
WHEN @Keyword = 'SCP' AND ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%') or (InvoiceHead.InvoiceID LIKE '%SCJ%')) THEN 1
WHEN @Keyword = 'SCNH' AND ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%') or (InvoiceHead.InvoiceID LIKE '%SNJH%')) THEN 1
WHEN @Keyword = 'SCNHL' AND ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%') or (InvoiceHead.InvoiceID LIKE '%SNJHL%')) THEN 1
WHEN ((InvoiceHead.InvoiceID LIKE '%' + @Keyword + '%')) THEN 1
END) = 1
推荐阅读
- sparql - 在 wikidata SPARQL 上获取度数坐标?
- ruby-on-rails - 如何替换红宝石范围内的最后一次出现?
- javascript - 将javascript注入iframe
- javascript - 更改 redux 存储时如何重新运行函数(在安装组件时运行)?
- ubuntu - 如何识别spring boot项目中的websocket或hibernate连接泄漏
- elasticsearch - 如何在 Grafana 中以 elasticsearch 为源创建 TPS 仪表板
- c++ - 字符串与字符数组;为什么我得到不同的结果?
- visual-studio-2019 - 将 WDK 1809 扩展安装到 VS 2019 时出错
- python - 在 Reportlab 中为每列设置不同的大小
- azure-cognitive-search - Azure 认知搜索自动完成停用词