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

Откуда:
Сообщений: 51
Здравствуйте.

при выполнении запроса
SELECT distinct
*

FROM
Receipt_Order_grid OUTER APPLY mf_RO(Receipt_Order_grid.RO_ID, Receipt_Order_grid.ReceiptItems_ID) as mfRO


выдает ошибку

автор
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.


Причем на одной БД отрабатывает нормально, а на другой - нет. Эти две БД имеют одинаковый дизайн.
14 авг 14, 16:54    [16442520]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37254
yanik
Причем на одной БД отрабатывает нормально, а на другой - нет. Эти две БД имеют одинаковый дизайн.
Значит в другой Бд есть значения, которые не конвертятся из nvarchar во float.
14 авг 14, 16:58    [16442542]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
yanik,

другая либо имеет версию меньше SQL2005,
либо совместимость <90
Что там возвращает
EXEC sp_dbcmptlevel <ИмяБазы>
?
14 авг 14, 17:01    [16442552]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

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

The current compatibility level is 100.
На обеих базах это выдается
20 авг 14, 17:13    [16469885]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
yanik
iap,

The current compatibility level is 100.
На обеих базах это выдается
Значит, mf_RO в разных базах разная.
Или поля Receipt_Order_grid.RO_ID, Receipt_Order_grid.ReceiptItems_ID разного типа.
20 авг 14, 17:22    [16469950]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> mf_RO

а, собственно, что там? текст покажите, то есть.
20 авг 14, 17:35    [16470032]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

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

пример данных:
автор
RO_ID ReceiptItems_ID
229 1243:10
230 1243:9
231 1243:15
232 1243:12
233 1243:9


тип данных у обоих полей nvarchar()
20 авг 14, 17:52    [16470143]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
o-o
Guest
не, текст функции просили, mf_RO
20 авг 14, 17:56    [16470168]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

Откуда:
Сообщений: 51
o-o,

не понял. какой запрос нужно выполнить?
20 авг 14, 18:03    [16470196]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
o-o
Guest
select object_definition(object_id('dbo.mf_RO '))
20 авг 14, 18:19    [16470271]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

Откуда:
Сообщений: 51
o-o,


CREATE FUNCTION dbo.mf_RO (@RowID int, @Values nvarchar(max)) RETURNS @ROGrid TABLE ( RowID int, ItemID int, ItemValue float ) AS BEGIN DECLARE @ItemPos int DECLARE @NextItemPos int DECLARE @DDPos int DECLARE @Item nvarchar(32) IF (LEN(ISNULL(@Values, '')) > 0) BEGIN SET @ItemPos = 1 WHILE (@ItemPos < LEN(@Values)) BEGIN SET @NextItemPos = CHARINDEX(CHAR(13)+CHAR(10), @Values, @ItemPos) IF (@NextItemPos = 0) SET @NextItemPos = LEN(@Values) + 1 IF (@NextItemPos - @ItemPos > 1) BEGIN SET @Item = SUBSTRING(@Values, @ItemPos, @NextItemPos - @ItemPos) SET @DDPos = CHARINDEX(':', @Item) IF (@DDPos > 1 AND @DDPos < LEN(@Item)) BEGIN INSERT @ROGrid (RowID, ItemID, ItemValue) VALUES (@RowID, CAST(SUBSTRING(@Item, 1, @DDPos - 1) as int), CAST(REPLACE(SUBSTRING(@Item, @DDPos + 1, LEN(@Item) - @DDPos), ',', '.') as float)) END END SET @ItemPos = @NextItemPos + 2 END END RETURN END

Сообщение было отредактировано: 21 авг 14, 10:09
21 авг 14, 09:43    [16471959]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
yanik,

ну так, видимо, какую-то из строк Receipt_Order_grid.ReceiptItems_ID ваша функция разобрать не может.
попробуйте курсором по таблице пройтись и выловить ее. а уже когда найдете, разбирайтесь в чем дело - со строкой ли что-то не то, или в функции что-то подправить надо.
21 авг 14, 10:10    [16472103]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
yanik,

а если после двоеточия какая-нибудь буква стоит по ошибке?
Она же во FLOAT сконвертироваться не может.

Тут я вот чего хочу сказать.
1. Там действительно прописаны числа в формате mmm.mmmE+nn? Или, всё-таки, только цифры и точка?
Во втором случае я бы отказался от FLOAT в пользу DEC()
2. Использование NVARCHAR(MAX) говорит о том, что длина строки превышает 4000 символов?
Если нет, то лучше NVARCHAR(4000). Кроме того, парсинг в этом случае можно организовать
одним SELECTом, а функцию сделать inline вместо multistatement.
Хотя, и для NVARCHAR(MAX) любители XML вам могут предложить парсить через XML...
3. Перед конвертированием строки в числовой тип надо бы проверять на конвертируемость.
Начиная с SQL2012 для этого можно использовать TRY_CONVERT, TRY_CAST или TRY_PARSE

4. Вы привели функцию только в одной базе. А в другой она точно такая же?
5. Данные, для которых вызывается функция, абсолютно одинаковые в двух базах?

6. Раз у вас везде юникод, надо бы ставить букву N перед литеральными строками и
пользоваться функцией NCHAR() вместо CHAR()
21 авг 14, 10:29    [16472241]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

Откуда:
Сообщений: 51
После обновления данных запрос заработал. Т.е. стал выполнятся без ошибок, но почему то не выводит данные.
25 авг 14, 18:02    [16489915]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
yanik
После обновления данных запрос заработал. Т.е. стал выполнятся без ошибок, но почему то не выводит данные.
Наверное, где то ошибка.

Как то вы неконкретно пишите. Какие данные обновили, как, какой командой...
Работу за вас тут не сделают, у нас даже доступа нету на ваш сервер, так что вы задавайте конкретные вопросы, с примерами таблиц с данными.

Рекомендации по оформлению сообщений в форуме
25 авг 14, 19:11    [16490190]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
o-o
Guest
yanik
После обновления данных запрос заработал. Т.е. стал выполнятся без ошибок, но почему то не выводит данные.


а вот такое случаем не 0 выдает?
SELECT count(*)
FROM
Receipt_Order_grid
25 авг 14, 20:37    [16490408]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

Откуда:
Сообщений: 51
o-o,

нет, в таблице Receipt_Order_grid записи имеются.

iap
4. Вы привели функцию только в одной базе. А в другой она точно такая же?

Странно, но сейчас
select object_definition(object_id('dbo.mf_RO '))

выводит NULL

iap
5. Данные, для которых вызывается функция, абсолютно одинаковые в двух базах?


В той базе, в которой выводится ошибка более новая. в ней записей больше, но формат записей идентичный.

Пробовал выполнить запрос
SELECT *
FROM mf_RO ('','')

но он не выполняется. Пишет invalid object name, при этом
CREATE FUNCTION dbo.mf_RO 
пишет "There already an object named 'mf_RO' in the database.
Странно очень.
26 авг 14, 16:53    [16495392]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104751
yanik
Пробовал выполнить запрос
SELECT *
FROM mf_RO ('','')


но он не выполняется. Пишет invalid object name, при этом

Потому что табличные функции вызываются с именем схемы
26 авг 14, 16:55    [16495410]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
Glory
yanik
Пробовал выполнить запрос
SELECT *
FROM mf_RO ('','')



но он не выполняется. Пишет invalid object name, при этом

Потому что табличные функции вызываются с именем схемы
А не скалярные?
Хотя, схема всегда нужна
26 авг 14, 17:24    [16495677]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

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

dbo.mf_RO тоже пробовал писать.
26 авг 14, 17:56    [16495914]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
o-o
Guest
yanik,

а покажите результат вот этого:
select *
from sys.objects
where name = 'mf_RO'

выполнять в контексте "странной" базы
26 авг 14, 18:32    [16496133]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
Glory
Member

Откуда:
Сообщений: 104751
yanik
при этом
CREATE FUNCTION dbo.mf_RO 

пишет "There already an object named 'mf_RO' in the database.
Странно очень.

Типы объектов не ограничиваются только функциями.
Сообщение говорит, что существует объект, а не именно функция
26 авг 14, 19:21    [16496357]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
yanik
Member

Откуда:
Сообщений: 51
o-o,

ничего не возвращает
27 авг 14, 12:19    [16499382]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
yanik
o-o,

ничего не возвращает
либо объекта нет, либо у Вас нет на него прав доступа.
27 авг 14, 12:27    [16499449]     Ответить | Цитировать Сообщить модератору
 Re: Выдает непонятную ошибку  [new]
o-o
Guest
yanik,
а вот такое что выдаст?
(если 62 строки, не копируйте, а вот если меньше, то покажите нам)
select *
from sys.fn_my_permissions(null, 'database')
27 авг 14, 12:46    [16499649]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить