Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Добрый день!
Пишу процедуру на то, чтобы человек вводил 2 параметра: начальную и конечную дату и те продажи, что входят в этот период должны выводиться.
сам текст процедуры:

CREATE proc Prodagy
@data1 datetime = NULL, @data2 datetime = NULL
as
If ((@data1 is null) or (@data2 is null))
Begin
Raiserror ('Неверный формат введенных дат: %s %s ', 16, 1, @data1, @data2)
Return
end
Sel ect "Марка", "Модель"
Fr om Модель mo join Марка ma on mo."Код_марки"=ma."Код_марки"
join Автомобили av on av."Код_модели"=av."Код_модели"
join Продажи pr on av. "Код_автомобиля"=pr."Код_автомобиля"
where @data1<"Дата_продажи"
and @data2>"Дата_продажи"

После этого обращаюсь:
exec Prodagy '04.06.2009 18:13:56','04.06.20013 18:13:56'
И он выдает ошибку: Error converting data type varchar to datetime
подскажите пожалуйста, что ему не нравится?
30 май 13, 12:10    [14369190]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Аброний
Добрый день!
Пишу процедуру на то, чтобы человек вводил 2 параметра: начальную и конечную дату и те продажи, что входят в этот период должны выводиться.
сам текст процедуры:

CREATE proc Prodagy
@data1 datetime = NULL, @data2 datetime = NULL
as
If ((@data1 is null) or (@data2 is null))
Begin
Raiserror ('Неверный формат введенных дат: %s %s ', 16, 1, @data1, @data2)
Return
end
Sel ect "Марка", "Модель"
Fr om Модель mo join Марка ma on mo."Код_марки"=ma."Код_марки"
join Автомобили av on av."Код_модели"=av."Код_модели"
join Продажи pr on av. "Код_автомобиля"=pr."Код_автомобиля"
where @data1<"Дата_продажи"
and @data2>"Дата_продажи"

После этого обращаюсь:
exec Prodagy '04.06.2009 18:13:56','04.06.20013 18:13:56'
И он выдает ошибку: Error converting data type varchar to datetime
подскажите пожалуйста, что ему не нравится?

Он не может преобразовать строку в дату. Он же вам пишет.
Попробуйте сделать 2 переменные. Присвоить им ваши значения через cast as datetime. И потом вызвать процедуру
30 май 13, 12:12    [14369210]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Аброний
exec Prodagy '04.06.2009 18:13:56','04.06.20013 18:13:56'

А вам точно время нужно? Или может быть просто тип Date использовать? и передавать в виде '20130604'?
30 май 13, 12:15    [14369231]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
04.06.20013 18:13:56' - 20 тысяч 13ый год наступит так нескоро, что текущий тип данных datetime не может хранить такое значение
30 май 13, 12:16    [14369235]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
спасибо, но он тогда выдает "Cannot specify datetime data type (RAISERROR parameter 4) as a substitution parameter for RAISERRROR."
30 май 13, 12:17    [14369238]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37198
Аброний
спасибо, но он тогда выдает "Cannot specify datetime data type (RAISERROR parameter 4) as a substitution parameter for RAISERRROR."
Плейсхолдера для даты в raiserror нет. Перед raiserror придется конвертировать явно в строку.

Сообщение было отредактировано: 30 май 13, 12:18
30 май 13, 12:18    [14369253]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
Аброний
но он тогда выдает "Cannot specify datetime data type (RAISERROR parameter 4) as a substitution parameter for RAISERRROR."

А вы с синтаксисом RAISERRROR знакомились, прежде чем использовать ?
30 май 13, 12:18    [14369254]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Сергей Викт.,

если использовать его, то он вообще не понимает:
"Column or parameter #1: Cannot find data type date."
30 май 13, 12:19    [14369260]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Glory,

это описка. там прописано как 2013
30 май 13, 12:20    [14369267]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Glory, да, там вроде все правильно...
30 май 13, 12:22    [14369279]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Гавриленко Сергей Алексеевич, а при конвертировании он выдает ошибку. которую я описываю в начале.
30 май 13, 12:23    [14369293]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
Аброний
Glory, да, там вроде все правильно...

Если бы было правильно, то не было бы серверного сообщения
30 май 13, 12:26    [14369318]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Сергей Викт.,
date вообще не поддерживается у меня. лишь smalldatetime и datetime
30 май 13, 12:26    [14369322]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Glory, Raiserror ('Неверный формат введенных дат', 16, 1) я ввожу и так, он все равно выдает ошибку. при datetime использовании ошибка что не может конвертировать varchar и datetime. а при использовании smalldatetime говорит об ошибке с raiseerror.
30 май 13, 12:31    [14369364]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
Аброний
Glory, Raiserror ('Неверный формат введенных дат', 16, 1) я ввожу и так, он все равно выдает ошибку.

Мда. А может это потому, что вы пишите CREATE proc ?
Сервер, кроме текста ошибки сообщает и в какой строке она произошла.
Как раз для того, чтобы понимать, какая команда вызвала ошибку
30 май 13, 12:33    [14369384]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Glory, он не ругается на саму процедуру. он ругается. когда я обращаюсь к процедуре. просто пишет, что не может конвертировать и все
30 май 13, 12:35    [14369401]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
Аброний
Glory, он не ругается на саму процедуру. он ругается. когда я обращаюсь к процедуре. просто пишет, что не может конвертировать и все

Вот именно. Вы считаете что сервер должен уметь любую строку конвертировать в дату ?
30 май 13, 12:36    [14369415]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Аброний
он ругается. когда я обращаюсь к процедуре. просто пишет, что не может конвертировать и все

Так попробуйте вызвать:
exec Prodagy '2009-06-04T18:13:56', '2013-06-04T18:13:56'
30 май 13, 12:37    [14369421]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Гость333,

Вышло, но при этом у меня теперь выводятся все машины и по нескольку раз...
30 май 13, 12:41    [14369465]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
Аброний
о при этом у меня теперь выводятся все машины и по нескольку раз...

Значит вы такой запрос написали
30 май 13, 12:42    [14369477]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Аброний,

Значит, напишите в хранимой процедуре запрос, которые будет выводить только нужные машины нужное количество раз.
30 май 13, 12:42    [14369484]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Гость333,

работает, оказывается лишнюю таблицу добавила. спасибо!
30 май 13, 12:45    [14369505]     Ответить | Цитировать Сообщить модератору
 Re: Datetime для SQL в процедуре  [new]
Аброний
Member

Откуда:
Сообщений: 13
Glory,

спасибо!
30 май 13, 12:46    [14369515]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить