сначала, сделайте print @strsql
, чтобы показать свой динамический запрос и проверьте.
Вы увидите, что ваш запрос dateendrole >= 2016/01/01
дата должна быть в одинарной кавычке dateendrole >= 2016/01/01'
ваш запрос должен быть
and dateendrole >= '''+ @startdate+ ''' and dateendrole<= '''+ @enddate+'''
лучший способ - использовать параметр с sp_executesql
, объявив обе переменные как date
тип данных, так как он собираетсядля хранения значения даты
declare @startdate date = '20160101',
@enddate date = '20191004'
и в вашем динамическом запросе просто используйте переменную
and dateendrole >= @startdate and dateendrole <= @enddate
, наконец, при вызове sp_executesql
, передайте переменную. И не забудьте распечатать подтвердить свой запрос
print @strsql
exec sp_executesql @strsql, N'@startdate date, @enddate date', @startdate, @enddate