Прежде чем вы кричите на меня в CAPS за то, что я не ищу - у меня есть!Динамический SQL это хорошо, динамический SQL это плохо.Многому научиться ..
Я могу выполнить то, что мне нужно, используя логику в предложении WHERE, но это значительно увеличивает время выполнения.Запрос занимает 8 секунд, если я жестко кодирую критерии, и 1:20, если я использую логику WHERE.
Вот что я хотел бы сделать:
Declare @EmployeeToggle varchar(30)
Declare @Employee_ID varchar(30)
Declare @EmployeeField varchar(100)
set @EmployeeToggle = '1'
set @Employee_ID = '1166'
set @EmployeeField = case when @EmployeeToggle = '1' then 'Field1' else
'Field2' end;
select * from Table1 where @EmployeeField = @Employee_ID
Я не знаюНе думаю, что это возможно без динамического SQL.Я до сих пор не знаю, стоит ли мне его использовать.Я подумал, что запрос вернется к 8 секундам, потому что он сразу узнает, какое поле использовать в предложении where.
В качестве альтернативы, есть несколько способов сделать это только где:
where (( not @EmployeeToggle = '1') or Field1 = @Employee_ID) and
(@EmployeeToggle = '1' or Field2 = @Employee_ID)
where (1=(case when @EmployeeToggle = '1' then 1 else 0 end ) or Field1 =
@Employee_ID)
and (1=(case when @EmployeeToggle = '2' then 1 else 0 end) or Field2 =
@Employee_ID)
Они прекрасно работают (по общему признанию, я скопировал и вставил эти примеры), но за счет времени выполнения.
Моя последняя мысль и то, как другие сделали это в моей организации, - это создать два одинаковых сценария, за исключением поля, используемого в предложении where.Таким образом, если @EmployeeToggle = '1', он запустит первый скрипт, а если '2', то запустит второй.Я еще не пробовал, но я предполагаю, что время выполнения будет ближе к 8 секундам за счет какого-то уродливого кода.
Спасибо за помощь.