Что не так с этим SQL? - PullRequest
       36

Что не так с этим SQL?

0 голосов
/ 17 ноября 2009

SQL:

execute ('delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(max), 0) + '''')

Ошибка

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'convert'.

Комментирование части преобразования устраняет ошибку. Что не так?

Ответы [ 5 ]

12 голосов
/ 17 ноября 2009

Замените «выполнить» на «печать», удалите скобки и запустите, и вы получите

delete from HttpRequests where Date < '2009-08-0'

Это недействительная дата.

3 голосов
/ 27 декабря 2009

EXECUTE (@stringvariable) не позволяет объединение более сложное, чем @stringvariable1 + @stringvariable2

Вы должны сделать это:

DECLARE @sql nvarchar(4000)
SELECT @sql = 'delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(4000), 0) + '''
EXECUTE (@sql)

Однако, тогда у вас есть неверная ошибка даты ... и я тоже исправил ошибку в кавычках ...

2 голосов
/ 17 ноября 2009

Нет ничего плохого в утверждении. SQL просто не позволяет передавать результат выражения CONVERT в EXEC. Я не могу найти никакой документации для этого, но многие люди сообщают об этом поведении.

http://www.eggheadcafe.com/software/aspnet/34917755/pass-result-of-convert-as.aspx

1 голос
/ 17 ноября 2009

Похоже, вы не создаете правильную дату.

select 'delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(max), 0) 

+ '' ''

даст вам: удалить из HttpRequests, где Дата <'2009-08-0' </p>

0 голосов
/ 17 ноября 2009

Запросите даты типа yyyyMMdd и поставьте max между [].

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