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

Откуда: г. Москва
Сообщений: 71
Есть процедура которая начинается так:

CREATE PROCEDURE sp_CreateNewRating
@qqq float,
@typeR int = 2,
@Razdel int = 1
AS
set nocount on

есть Job с такой строчкой вызова этой процедуры
EXEC sp_CreateNewRating @q--, @typeR,@Razdel


есть лог с такой строчкой
Msg 242, Sev 16: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. [SQLSTATE 22007]

ругается на параметр @typeR если его убрать полностью то все выполняется чисто, при наличии этого параметра появляется эта ошибка. переменную переименовывал, переставлял порядок короче шаманил по полной но результат один:(
Но если выполнять это из анализера то все проходит на ура.
Может мне кто объяснит где job находит char & datetime?
19 фев 03, 10:48    [131907]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
>EXEC sp_CreateNewRating @q--, @typeR,@Razdel

А как объявлены переменные, которые ты передаешь в процедуру и где присвоение значений переменным.
19 фев 03, 10:59    [131920]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
Timchik
Member

Откуда: г. Москва
Сообщений: 71
declare @typeR  int

declare @Razdel int
declare @q float
set @q = convert(float,convert(int,convert(float,getdate(),103)))
set @typeR=2
set @Razdel=1
EXEC sp_CreateNewRating @q, @typeR,@Razdel
19 фев 03, 11:04    [131928]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Ошибка скорей всего здесь:

set @q = convert(float,convert(int,convert(float,getdate(),103)))

Вот выдержка из BOL про третий параметр CONVERT:

style

Is the style of date format used to convert datetime or smalldatetime data to character data (nchar, nvarchar, char, varchar, nchar, or nvarchar data types), or the string format when converting float, real, money, or smallmoney data to character data (nchar, nvarchar, char, varchar, nchar, or nvarchar data types).
19 фев 03, 11:11    [131944]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Я хотел сказать, попробуй убрать третий параметр.
19 фев 03, 11:15    [131949]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
Timchik
Member

Откуда: г. Москва
Сообщений: 71
CREATE  PROCEDURE sp_CreateNewRating 

@qqq int,
@typeReiting int = 2,
@Razdel int = 1
AS
set nocount on


EXEC sp_CreateNewRating 37669, 2,1

даже такой вариант из joba не проходит, из анализера все выпоолняется на ура
19 фев 03, 11:19    [131955]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Ну тогда пиши что внутри процедуры.
19 фев 03, 11:24    [131960]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
Timchik
Member

Откуда: г. Москва
Сообщений: 71
CREATE  PROCEDURE sp_CreateNewRating 

@qqq int,
@typeReiting int = 2,
@Razdel int = 1
AS
set nocount on
print @qqq
print @typeReiting
print @Razdel
declare @mysql nvarchar(700)
declare @dt datetime
set @dt=convert(datetime,@qqq,103)
print @dt

результат:
Msg 242, Sev 16: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. [SQLSTATE 22007]
Msg 0, Sev 16: 37669 [SQLSTATE 01000]
Msg 0, Sev 16: 2 [SQLSTATE 01000]
Msg 0, Sev 16: 1 [SQLSTATE 01000]
Msg 0, Sev 16: Feb 19 2003 12:00AM [SQLSTATE 01000]
Msg 3621, Sev 16: The statement has been terminated. [SQLSTATE 01000]

Мой вывод: что-то ему не нравится в процессе передачи параметров
19 фев 03, 11:31    [131966]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
>set @dt=convert(datetime,@qqq,103)

IMHO, здесь проблема. Ну я ведь тебе сказал про третий параметр. Он используется при преобразовании datetime в строковые типы. Попробуй его убрать.
19 фев 03, 11:35    [131969]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
Timchik
Member

Откуда: г. Москва
Сообщений: 71
не помогает :(
он же ругается до в момент передаци параметров а не после.
19 фев 03, 11:47    [131986]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
А почему ты решил, что до. Блин, ну я не знаю. А ты всю процедуру привел.
19 фев 03, 11:51    [131993]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
Timchik
Member

Откуда: г. Москва
Сообщений: 71
Да, ты прав
set @mysql='insert INTO #RatingTemp (DateRating,ID_TypeBooks,ID_Books,TypeRating,k) SELECT top '

if (@typeR=1 and @Razdel <>1) set @mysql = @mysql+'10 '''
else set @mysql=@mysql+'100 '''
set @mysql=@mysql+CONVERT(nvarchar(15), @dt,103)
set @mysql=@mysql+''', Books.ID_TypeBooks, Books.ID_Books, '
set @mysql=@mysql+CONVERT(nvarchar(10), @typeR)
set @mysql=@mysql+', sum(Nakl.Quantity*Nakl.Price) FROM Sales INNER JOIN Books INNER JOIN Nakl ON Books.ID_Books = Nakl.ID_Books ON Sales.ID_Sales = Nakl.ID_Sales WHERE (Sales.ID_TypeSales<>3) AND (Sales.InWork=0) AND (Sales.DateOper Between'
set @mysql=@mysql+' ''' + CONVERT(nvarchar(50), (@dt-7),103)
set @mysql=@mysql+''' AND ''' +CONVERT(nvarchar(50), @dt,103) + ''')'
set @mysql=@mysql+' AND (Books.ID_TypeBooks '
if @typeR=1 set @mysql=@mysql+'='+CONVERT(nvarchar(10), @Razdel)+')'
else
if @typeR=2 set @mysql=@mysql+'<>1) AND (Books.ID_TypeBooks<>26) AND (Books.ID_TypeBooks<>45)'
Set @mysql=@mysql+' GROUP BY Books.ID_Books,Books.ID_TypeBooks ORDER BY 5 DESC,3'
print @mysql
EXECUTE sp_executesql @mysql

при появлении этого куска начинается фигня в jobe
19 фев 03, 12:01    [132004]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Скорее всего ошибка в одном из этих конвертов CONVERT(nvarchar(50), (@dt-7),103). Ты преобразуешь к строке, а судя по всему, вставляешь в поле с типом datetime. Т.е. сервак не может выполнить преобразование, так как то, что ты ему подсовываешь, не влезает в тип datetime. Если у тебя 103 то получается dd/mm/yyyy, попробуй 101, чтоб было mm/dd/yyyy/, или совсем убери третий параметр. Пусть сервак сам разбирается.
19 фев 03, 12:08    [132017]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про параметры процедуры  [new]
Timchik
Member

Откуда: г. Москва
Сообщений: 71
добавление в процедуру
SET DATEFORMAT dmy
спасло положение

Спасибо за помощь!
19 фев 03, 12:17    [132029]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить