#sql #stored-procedures #sql-server-2012
#sql #хранимые процедуры #sql-server-2012
Вопрос:
Я пытаюсь SELECT
создать строки на основе двух значений с помощью этой хранимой процедуры:
ALTER PROCEDURE [dbo].[MYSelect]
-- Parameters with default values
@MitarbeiterId AS int,
@Wann AS datetime2(7)
AS
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT *
FROM [Plan]
WHERE RefMitarbeiterId = @MitarbeiterId
AND Jahr <= YEAR(@Wann)
AND Monat <= MONTH(@Wann)
AND Abgeschlossen = 0
Проблема заключается в следующей части:
AND Jahr <= YEAR(@Wann)
AND Monat <= MONTH(@Wann)
Я не знаю, почему эта часть вызывает (синтаксическую) проблему. С учетом этих строк, используя MSSQL Studio, я получаю сообщение об ошибке unable to convert DateTime to Integer
. Удаление этих результатов возвращает результаты и не имеет синтаксической ошибки. Я использую YEAR()
и MONTH()
в других местах, поэтому я не понимаю, почему здесь возникает проблема.
Это Plan
таблица:
Комментарии:
1. И в чем проблема?
Ответ №1:
Условия
AND Jahr <= YEAR(@Wann)
AND Monat <= MONTH(@Wann)
разделите условие на год и месяц.
Это не означает, что годы и месяц меньше параметра, но где год меньше или равен году параметра, а месяц меньше или равен месяцу параметра.
Используя today (2014-06-30) в качестве параметра, ваш запрос вернет каждую строку, где с Monat от 1 до 6 для прошлого и текущего года: например, строки с декабря 2013 года не будут возвращены.
Чтобы получить все строки до даты параметра, вам нужно изменить условия на
AND ((Jahr = YEAR(@Wann) AND Monat <= MONTH(@Wann))
OR Jahr < YEAR(@Wann))
Комментарии:
1. mhh, я также выполняю процедуру по-разному с всегда одинаковыми параметрами. Это похоже на ошибку, если вы используете представление для запуска процедуры, которая выдает эту ошибку, но если вы запустите ее через
EXEC
, она работает нормально
Ответ №2:
После тестирования различных способов выполнения этой процедуры
я теперь думаю, что это ошибка, если вы используете представление с параметром Datetime в SQL Server Manangement Studio
потому что я тестировал
EXEC
который работает хорошо
затем удалил мои параметры
это возвращает ошибку, которая сообщает мне, что не удалось преобразовать '01.07.2014 00:00:00'
в datetime, но возвращает правильные строки
если я сейчас сделаю это снова со своими параметрами и добавлю свои значения
я получаю исключение, которое сообщает мне то же самое, что и ошибка выше, поэтому мне нужно удалить '
, а затем я получаю unable to convert DateTime to Integer
сообщение, которое, по моему мнению, является ошибкой