Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка преобразования даты или времени 
:(
    Опции темы
kurajamba
Дата 30.8.2012, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Привет всем!

Не пойму почему не работает мой запрос?
Код

SELECT * FROM GetMyInfo(GETDATE());


Функция объявлена как:

Код

FUNCTION [dbo].[GetMyInfo](@MyDate datetime)


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

Что не так?
PM   Вверх
Akina
Дата 30.8.2012, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



А где написано, что имя ТАБЛИЦЫ в запросе может браться из значения функции?



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kurajamba
Дата 30.8.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Прошу прощения, думал будет понятно, что функция - это многооператорная процедура, возвращающая табличное значение.
Привожу полное объявление.

Код

FUNCTION [dbo].[GetMyInfo](@MyDate datetime)
RETURNS 
@Result TABLE 
(
    Param1 int,
    Param2 int,
    Param3 varchar(50), 
    Param4 varchar(50),
    Param5 varchar(50),
    Param6 varchar(50),
    Param7 varchar(50),
    Param8 numeric(15, 3),
    Param9 varchar(10),
    Param10 numeric(15, 2),
    Param11 numeric (15, 2),
    Param12 numeric(15, 2)
)
AS
BEGIN
 ...
 ...
 ...
END;

PM   Вверх
Akina
Дата 30.8.2012, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Тем более - как в качестве имени таблицы (не таблицы!!! а именно её имени) может использоваться набор записей...

Сделай select into into из функции во временную таблицу, а потом уже обрабатывай полученный набор записей.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kurajamba
Дата 30.8.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Слушай, у меня есть точно такая же функция только не принимающая в себя никаких аргументов и она отрабатывает нормально.
Например, 
Код

SELECT * FROM GetMyInfoNew();

Проблема возникает когда я передаю параметр в функцию которую в самую первую запостил. Не пойму почему. Какая-то ошибка преобразования... Хотя типы вроде бы как совпадают.
Или я не понимаю о чем ты говоришь?

Это сообщение отредактировал(а) kurajamba - 30.8.2012, 17:06
PM   Вверх
Akina
Дата 30.8.2012, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Стоп! это я туплю... половину от MS SQL говорю, половину от MySQL...
Цитата(http://msdn.microsoft.com/en-us/library/ms186755.aspx)

Only constants and @local_variables can be passed to table-valued functions.

Так что сперва получи GETDATE() в локальную переменную, а потом вызывай функцию.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kurajamba
Дата 31.8.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Код

DECLARE @MyDate datetime;
SET @MyDate = GETDATE();

SELECT * FROM GetMyInfo(@MyDate);

И все равно ошибка:
Сообщение 241, уровень 16, состояние 1, строка 5
Ошибка преобразования даты или времени из символьной строки.
PM   Вверх
Akina
Дата 31.8.2012, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(kurajamba @  31.8.2012,  12:00 Найти цитируемый пост)
Сообщение 241, уровень 16, состояние 1, строка 5

Наконец-то!

Эта проблема возникает, если локаль сеанса отличается от локали сервера. Сделай при присовении в переменную CAST даты в соотв. локаль.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kurajamba
Дата 31.8.2012, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Не сообразил. Что нужно сделать?
Я уже полный путь прописал к функции.

database.dbo.GetMyInfo(@MyDate), но все равно ошибка... :(
PM   Вверх
Akina
Дата 31.8.2012, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



GetDate(), если верить докам, возвращает datetime2(7).
Для начала попробуй лобовое
Код

SET @MyDate = CAST(GETDATE() As DATETIME);

Не получится - попробуй CONVERT со Style=100 или 109 ... или 120/121...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kurajamba
Дата 31.8.2012, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Не хочет :(
PM   Вверх
Akina
Дата 31.8.2012, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Ну тогда совсем последний финт - переменная типа варчар, и каст в него снаружи и из него в датетайм внутри... заработает?

Добавлено через 1 минуту и 11 секунд
И ещё - если убрать параметр и вызывать getdate в начале функции - функция работает нормально?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 31.8.2012, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



Цитата(Akina @  31.8.2012,  12:25 Найти цитируемый пост)
Эта проблема возникает, если локаль сеанса отличается от локали сервера.

Я так полагаю в приведенном скрипте серверная(не сеансовая) переменная принимает серверное значение, сеансовая локль вроде никак и не задействована вовсе.
Предполагаю что ошибка поднимается внутри функции. Наверное в пятой строке (в приведенном листинге строк - четыре smile )


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
kurajamba
Дата 4.9.2012, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Вы оказались правы! Ошибка внутри функции!
Management Studio успешно создал функцию, ошибку не выдал. Что и дало мне основания полагать что внутри функции все чисто.
Спасибо!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.