Я пытаюсь реализовать способ замены «динамического SQL» предложения WHERE.
То есть, чтобы создать временную таблицу «#FilterTable», которая содержит имя и значение моего WHERE.
Затем я использую «левое соединение» для отображения моей целевой таблицы #Hotel с #FilterTable.
Однако, я получил сообщение об ошибке при использовании следующего кода:LEFT JOIN with CASE WHEN
DECLARE @filterName varchar(50)='Id',
@filterValue int =13
CREATE TABLE #Hotel (Id varchar(50), DisplayName varchar(100))
CREATE TABLE #FilterTable (Name varchar(50), Value varchar(100))
INSERT INTO #Hotel(Id,DisplayName) VALUES ('1','California Inn'), ('13','Hilton Hotel')
INSERT INTO #FilterTable(Name,Value) VALUES ('Id','13'),('DisplayName','Hotel')
SELECT a.*
FROM #Hotel a WITH(NOLOCK)
LEFT JOIN #FilterTable b WITH(NOLOCK)
ON @filterName= b.Name
AND
CASE b.Name
WHEN 'Id' THEN CONVERT(varchar(10), a.Id) = b.Value
WHEN 'DisplayName' THEN a.DisplayName like b.Value END
DROP Table #Hotel
DROP Table #FilterTable
Он всегда показывает ошибки в
WHEN 'Id' THEN CONVERT(varchar(10), a.Id) = b.Value
WHEN 'DisplayName' THEN a.DisplayName like b.Value END
Я знаю, что если я изменяю
WHEN 'DisplayName' THEN CONVERT(varchar(10), a.Id) END = b.Value
, он будет pass, но в этой ситуации нет возможности добавить второе условие в предложение WHEN.
Кто-нибудь знает, что такое правильный синтаксис, чтобы поставить эти два предложения «КОГДА» togather?
Моя версия db - это SQL SERVER 2014 Enterprise.
Спасибо.
Благодарим Вас за уведомление @MegaTron – user3174976