Как добавить объединение на основе параметра, переданного в хранимой процедуре - PullRequest
0 голосов
/ 04 октября 2011

Могу ли я добавить внутреннее соединение или левое соединение или правое соединение на основе значения параметра.Единственный способ, которым я сейчас пользуюсь, - это написать динамический запрос вроде

set @sql = 'select * from dbo.products PM(nolock)
'+ case when @orgunit is not null then ' join productorgunit pou on PM.ProductNumber =     pou.ProductNumber '
               else ''
          end
         + '
Exec(@sql).

Я надеюсь, что есть что-то вроде

Select * from dbo.products PM(nolock)
case when @orgunit is not null then join productorgunit pou on PM.ProductNumber = pou.ProductNumber 

          end  

1 Ответ

0 голосов
/ 04 октября 2011

Разве вы не можете просто использовать левое внешнее соединение?

SELECT PM.*, pou.ProductNumber 
FROM dbo.Products PM LEFT OUTER JOIN ProductOrgUnit pou ON 
                                     PM.ProductNumber = pou.ProductNumber

Это вернет все записи из Продуктов и вернет данные только из ProductOrgUnit, если есть соответствующая запись (в противном случае поля pou будут нулевыми в наборе результатов).

В качестве альтернативы вы можете иметь два отдельных запроса в sproc и использовать оператор IF T-SQL, чтобы выбрать, какой из них запускать.

...