Как создать предложение SQL Where, используя поля в динамическом запросе? - PullRequest
1 голос
/ 05 мая 2011

Это небольшой пример запроса большего размера, который я пытаюсь выполнить. Это динамический запрос, поэтому я помещаю все это в строку и затем выполняю ее. Однако это терпит неудачу. Пользователь отправляет только месяц и год. Я тогда выполню это. Но это говорит мне, что поля не могут быть связаны.

declare @sqlstr varchar(5000)
set @sqlstr = 'SELECT     FirstName, LastName FROM  MyTable Where '
set @sqlstr = @sqlstr + CONVERT(varchar(2), MyTable.MyDateMonth) + '/1/' + CONVERT(varchar(4), MyTable.MyDateYear)
set @sqlstr = @sqlstr + ' = ''8/1/2006'''

exec(@sqlstr)

1 Ответ

3 голосов
/ 05 мая 2011

Вам не хватает кавычек вокруг КОНВЕРТОВ

set @sqlstr = @sqlstr + 'CONVERT(varchar(2), MyTable.MyDateMonth) + ''/1/'' + CONVERT(varchar(4), MyTable.MyDateYear)'

Добавление print @sqlstr может помочь вам отладить это.

Также вы подвергаете себя SQL-инъекции , поэтому вы должны sp_ExceuteSQL вместо просто exec

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...