У меня есть динамический запрос, в котором я объявляю 3 разные переменные, такие как:
DECLARE @JobNoteQuery NVARCHAR(MAX) = IIF(@JobNote = '%' , '' , ' INNER JOIN (SELECT ParentGuid FROM JobNotes JN WITH (NOLOCK)
WHERE JN.Note LIKE ''%''+@JobNote+ ''%''
GROUP BY ParentGuid) JN ON P.ProjectGuid = JN.ParentGuid');
DECLARE @ContactQuery NVARCHAR(MAX) = IIF(@Contact = '%' , '' , ' LEFT JOIN(SELECT
[ProjectKey]
FROM [ProjectCustomerContact] AS [pcc]
LEFT JOIN [Contact] AS [c] ON [c].[ContactKey] = [pcc].[ContactKey]
WHERE [c].[LastName] LIKE ''%''+@LastName+''%'') AS [pcc] ON [pcc].[ProjectKey] = [p].[ProjectKey]')
DECLARE @CustomerQuery NVARCHAR(MAX) = IIF(@Customer = '%' , '' , 'LEFT JOIN(SELECT
[ProjectKey]
FROM [ProjectCustomer] AS [pc]
LEFT JOIN [Customer] AS [c] ON [c].[CustomerKey] = [pc].[CustomerKey]
WHERE([c].[Name] LIKE ''%''+@CustName+''%''
OR [c].[DBA] LIKE ''%''+@CustName+''%'')) AS [PC] ON [pc].[ProjectKey] = [p].[ProjectKey]')
Итак, в запросе выбора я использую эти переменные в предложении Joins, например:
...INNER JOIN [Region] AS [re] ON [a].[RegionKey] = [re].[RegionKey]
'+@JobNoteQuery+'
'+@ContactQuery+'
'+@CustomerQuery+'
WHERE...
Мой вопрос,Если параметры моего дерева возвращают свои значения, я имею в виду @JobNoteQuery
, @ContactQuery
и @CustomerQuery
, всегда возвращают внутренние и левые объединения, но значение может быть нулевым, если одно из них не имеет значения, оно просто возвратит пустой список, поэтомуЕсть ли способ использовать OR
предложение в INNER JOINS
?Как:
...INNER JOIN [Region] AS [re] ON [a].[RegionKey] = [re].[RegionKey]
OR
'+@JobNoteQuery+'
OR
'+@ContactQuery+'
OR
'+@CustomerQuery+'
WHERE...
Это невозможно?Привет