i want a good way to improve my sql code, i have to use inner join when condition is met. I am currently replicates the code:
@SystemMerge bit
if (@SystemMe
Simple way if I am right -
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1 = myTable.param1
INNER JOIN systemTable on @SystemMerge = 0 or systemTable.param2=myTable.param2
This should (approxmately) do the same thing:
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1=myTable.param1
LEFT JOIN systemTable on systemTable.param2=myTable.param2 and @SystemMerge = 1
WHERE (@SystemMerge = 0 OR systemTable.NonNullableColumn IS NOT NULL)
Of course, this also means that any other references to columns within systemTable
must be written to expect such columns to be NULL
.
How about dynamic sql?
declare @sel varchar(max)
set @sel = ' SELECT
.......
FROM myTable
INNER JOIN table ON table.param1=myTable.param1
'
if (@SystemMerge=1)
begin
set @sel = @sel+'INNER JOIN systemTable on systemTable.param2=myTable.param2'
end
exec(@sel)