Ich habe ein neues Spring Boot-Projekt mit SQL Server und muss die nativen MySQL-Abfragen für die Repository-Methoden im alten Projekt durch native SQL Server-Abfragen ersetzen. Dies ist eine komplexe Abfrage, bei der die Bedingung ein Case-When-Ausdruck ist. Wenn ich versuche, die Abfrage in SQL Server Management Studio zu testen, wird der Fehler wie im Bild unten gezeigt angezeigt. Geben Sie hier eine Bildbeschreibung ein
Dies ist meine alte native Abfrage, die MySQL für die Repository-Methode verwendet, und ich m?chte sie durch SQL Server ersetzen Geben Sie hier eine Bildbeschreibung ein Bitte helfen Sie mir, eine L?sung zu finden. Vielen Dank im Voraus! !
這就是您所擁有的內(nèi)容以及您應(yīng)該在問(wèn)題中以文本形式發(fā)布的內(nèi)容。作為文本,試圖幫助您的人可以搜索和復(fù)制它。
case when @num = 1 then p.merchant_name = @query else 1=1 end
CASE 是 TSQL 中的表達(dá)式。它不像許多其他語(yǔ)言那樣是一種流控制結(jié)構(gòu)。要使用“可選”過(guò)濾器,您需要使用 CASE 構(gòu)造一個(gè)布爾表達(dá)式來(lái)正確處理“可選”屬性。通常,使用 CASE 可以更復(fù)雜地完成此操作,如下所示:
case when @num = 1 and p.merchant_name @query then 0 else 1 end = 1
所以這里使用CASE來(lái)返回一個(gè)可以在比較中測(cè)試的值。使用 0 或 1 并沒(méi)有什么魔力。使用任何類型的任何值。
因此,當(dāng) CASE 表達(dá)式返回 0(實(shí)際上不是 1)時(shí),該行將被忽略(從結(jié)果集中刪除)。
鑒于您的查詢實(shí)際上是在應(yīng)用程序中構(gòu)建的,您應(yīng)該考慮動(dòng)態(tài)構(gòu)建查詢并根據(jù)需要添加參數(shù)。這可能會(huì)生成更有效的查詢,數(shù)據(jù)庫(kù)引擎可以更好地優(yōu)化該查詢?;蛘?,您可以查看此廚房水槽討論和 Erland 的關(guān)于動(dòng)態(tài)搜索條件的討論。 TBH 看起來(lái)有人使用 @num
作為拼湊以避免為八個(gè)特定過(guò)濾器值添加參數(shù)。如果我想同時(shí)過(guò)濾商家名稱和商店名稱,則無(wú)法使用此方法。