Основная проблема заключается в том, что вы пытаетесь объединить строковые данные с данными даты и времени. Предположительно, вы хотите создать строку
EndDate >= '01-01-1970' and EndDate <= '01-01-2200'
В вашем текущем утверждении у вас есть
+ cast('01-01-1970' as datetime)
+ cast('01-01-2200' as datetime)
. Это займет дату в виде строки и преобразует ее в тип данных datetime - который, внутренне - это 8-байтовое двоичное значение. Затем вы пытаетесь объединить это со строкой, и SQL не может этого сделать. Чтобы это исправить, начните с вашей строки:
set @Where = 'EndDate >= ''' + cast('01-01-1970' as datetime) + ''' and EndDate <= ''' + cast('01-01-2200' as datetime) + ''''
удалите ненужные операторы приведения:
set @Where = 'EndDate >= ''' + '01-01-1970'+ ''' and EndDate <= ''' + '01-01-2200' + ''''
, которые могут быть дополнительно упрощены до:
set @Where = 'EndDate >= ''01-01-1970'' and EndDate <= ''01-01-2200'''
One с другой стороны, у вас есть
Declare @Where varchar(MAX)
Set @Where = @Where + <etc>
@ Где инициализируется как NULL, и когда вы конкатенируете (добавляете) в него сконфигурированную строку, результатом также будет NULL. Я предполагаю, что вы добавляете предложение в существующий оператор WHERE; так как это «новое» предложение, я бы порекомендовал добавить здесь соответствующий логический оператор, например,
Set @Where = @Where + ' AND ' + <etc>