#sql #sql-server #datetime #stored-procedures #dynamic
#sql #sql-сервер #datetime #хранимые процедуры #динамический
Вопрос:
У меня есть динамическая процедура, в которой входной переменной может быть либо дата с соответствующим столбцом, отформатированным как datetime, ЛИБО строка с соответствующими столбцами, отформатированными как nvarchar .
Если вводом является дата, то это будет выглядеть как гггг-мм-дд .
Чтобы покрыть это, я попытался добавить следующее в свое предложение Where, но это создает приведенную ниже ошибку (если я удалю эту строку, тогда остальная часть процедуры будет работать по назначению):
@searchTerm nvarchar(256) = ''
-- ...
WHERE CASE WHEN ''' @searchCategory ''' <> ''dateX'' THEN
(A.' @searchCategory ' LIKE ''%' @searchTerm '%'')
ELSE
(A.dateX = ''' CAST(@searchTerm AS DATETIME) ''')
END
-- ...
Ошибка:
Conversion failed when converting date and/or time from character string.
Может кто-нибудь сказать мне, что я должен изменить здесь, чтобы заставить это работать?
Заранее большое спасибо, Майк.
Ответ №1:
Вы не можете поместить значение datetime в строку. Сначала приведите его к datetime, чтобы получить его в нужном формате, затем приведите к Varchar, чтобы он мог быть частью вашей динамической строки.
(A.dateX = ''' CAST(CAST(@searchTerm AS DATETIME) AS VARCHAR(20)) ''')
Или, если @searchTerm уже находится в нужном вам формате, вам не нужно его приводить
(A.dateX = @searchTerm)
Комментарии:
1. Спасибо. Не уверен, что я правильно объяснил это. Итак, мой ввод — nvarchar, а мой вывод — в случае, если это дата — должен быть datetime .
2. Вы пробовали мое решение?