Столкнулся со странной проблемой.
Есть две таблицы.
Классификатор
Код int
Иерархия nvarchar
Данные
Код объекта int
Код атрибута int // Соответствует Классификатор.Код
Значение nvarchar
В таблице данные в поле Значение в виде строчки хранятся разные вещи(числа, строки, даты). Есть некоторое количество записей, в поле Значение которых хранятся целые числа.
Если выбирать их запросом
SELECT CONVERT(int, [Значение]) FROM [Данные] WHERE ....
то все в порядке.
Но если немного усложнить запрос
SELECT SUM(CONVERT(int, [Значение])) FROM [Данные] WHERE ....
То это не выполняется. Пишет, что
Syntax error converting the nvarchar value '0.0503' to a column of data type int.
При этом значение 0.0503 в таблице действительно есть, но появляться оно не должно.
Как можно с этим справиться?
Здравствуйте, A_l_e_x_e_y, Вы писали:
A__>Столкнулся со странной проблемой. A__>Есть две таблицы.
A__>Классификатор A__>Код int A__>Иерархия nvarchar
A__>Данные A__>Код объекта int A__>Код атрибута int // Соответствует Классификатор.Код A__>Значение nvarchar
A__>В таблице данные в поле Значение в виде строчки хранятся разные вещи(числа, строки, даты). Есть некоторое количество записей, в поле Значение которых хранятся целые числа. A__>Если выбирать их запросом A__>
A__> SELECT CONVERT(int, [Значение]) FROM [Данные] WHERE ....
A__>
A__>то все в порядке. A__>Но если немного усложнить запрос A__>
A__> SELECT SUM(CONVERT(int, [Значение])) FROM [Данные] WHERE ....
A__>
A__>То это не выполняется. Пишет, что A__>
A__>Syntax error converting the nvarchar value '0.0503' to a column of data type int.
A__>
A__>При этом значение 0.0503 в таблице действительно есть, но появляться оно не должно. A__>Как можно с этим справиться?
А точно у вас в обоих случаях условия одинаковые ?
Все хотят хорошо провести время, но время не проведешь !
Здравствуйте, A_l_e_x_e_y, Вы писали:
A__>Здравствуйте, Chupa_Kabra, Вы писали: C_K>>А точно у вас в обоих случаях условия одинаковые ?
A__>Точно. Все что я делаю, это дописываю SUM. Остальная часть запроса остается той же самой.
Очень странно.
А вот так работает ?
select sum([Значение]) from (SELECT CONVERT(int, [Значение]) [Значение] FROM [Данные] WHERE ....) z
Все хотят хорошо провести время, но время не проведешь !
Здравствуйте, Chupa_Kabra, Вы писали: A__>>К сожалению MSSQL2000 так не умеет C_K>Здрасти приплыли ... C_K>Может вам BOL для начала почитать ?
Я бы почитал, но нету . С инета слить я его не могу.
В том виде, в котором вы предложили попробовать запрос не работает. На него ругается парсер SQL Query аналяйзера. Можно конечно сделать через временную таблицу, но мне такой подход не нравится.
Здравствуйте, A_l_e_x_e_y, Вы писали:
A__>Здравствуйте, Chupa_Kabra, Вы писали: A__>>>К сожалению MSSQL2000 так не умеет C_K>>Здрасти приплыли ... C_K>>Может вам BOL для начала почитать ? A__>Я бы почитал, но нету . С инета слить я его не могу.
A__>В том виде, в котором вы предложили попробовать запрос не работает. На него ругается парсер SQL Query аналяйзера. Можно конечно сделать через временную таблицу, но мне такой подход не нравится.
Я не предлагаю вам так оставлять, я предлагаю попробовать, что бы идентифицировать проблему.
Напишите полностью запрос и текст ошибки
Все хотят хорошо провести время, но время не проведешь !
Здравствуйте, Chupa_Kabra, Вы писали:
К сожалению тот вариант условия where, который я раньше использовал, я потерял.
Но есть новый запрос
SELECT *
FROM [Объекты НПО]
WHERE [Объекты НПО].[Код] = 30 OR
[Объекты НПО].[Код] IN
(SELECT CONVERT(int, [Значение]) FROM [Данные]
WHERE [Код объекта] = 30 AND [Код атрибута] IN (SELECT [Код] FROM [Классификатор] WHERE [Иерархия] LIKE '0202__01'))
Он выполняется нормально, если нет условия [Объекты НПО].[Код] = 30.
Если оно есть, то
Server: Msg 245, Level 16, State 1, Line 1
Syntax error converting the nvarchar value '427.5' to a column of data type int.
Здравствуйте, A_l_e_x_e_y, Вы писали:
A__>Здравствуйте, Chupa_Kabra, Вы писали: A__>К сожалению тот вариант условия where, который я раньше использовал, я потерял. A__>Но есть новый запрос
A__>
A__>SELECT *
A__>FROM [Объекты НПО]
A__>WHERE [Объекты НПО].[Код] = 30 OR
A__>[Объекты НПО].[Код] IN
A__>(SELECT CONVERT(int, [Значение]) FROM [Данные]
A__>WHERE [Код объекта] = 30 AND [Код атрибута] IN (SELECT [Код] FROM [Классификатор] WHERE [Иерархия] LIKE '0202__01'))
A__>
A__>Он выполняется нормально, если нет условия [Объекты НПО].[Код] = 30. A__>Если оно есть, то A__>
A__>Server: Msg 245, Level 16, State 1, Line 1
A__>Syntax error converting the nvarchar value '427.5' to a column of data type int.
A__>
Что то не нравится мне ваш запрос, если [Объекты НПО].[Код] — у вас строка, то вам лучше строкой и сравнивать
Почему у вас типы полей разные ?
Все хотят хорошо провести время, но время не проведешь !
Здравствуйте, A_l_e_x_e_y, Вы писали:
A__>Здравствуйте, Chupa_Kabra, Вы писали: A__>К сожалению тот вариант условия where, который я раньше использовал, я потерял. A__>Но есть новый запрос
A__>
A__>SELECT *
A__>FROM [Объекты НПО]
A__>WHERE [Объекты НПО].[Код] = 30 OR
A__>[Объекты НПО].[Код] IN
A__>(SELECT CONVERT(int, [Значение]) FROM [Данные]
A__>WHERE [Код объекта] = 30 AND [Код атрибута] IN (SELECT [Код] FROM [Классификатор] WHERE [Иерархия] LIKE '0202__01'))
A__>
A__>Он выполняется нормально, если нет условия [Объекты НПО].[Код] = 30. A__>Если оно есть, то A__>
A__>Server: Msg 245, Level 16, State 1, Line 1
A__>Syntax error converting the nvarchar value '427.5' to a column of data type int.
A__>
Структуру таблиц в студию
Все хотят хорошо провести время, но время не проведешь !
Здравствуйте, Chupa_Kabra, Вы писали: C_K>Структуру таблиц в студию
Я опущу поля, которые не участвуют в запросе.
Классификатор
Код int
Иерархия nvarchar
Объекты НПО
Код int
Название nvarchar
Данные
Код int
Код атрибута int //свяано c Классификатор.Код
Код объекта int //связано с [Объекты НПО].[Код]
Значение nvarchar
Здравствуйте, B0rG, Вы писали: BG>Не понимаю проблемы — сходите к начальству, скажите для работы необходимо — потому как действительно необходимо, пускай давит на админов.
Желание слить врозникло только сегодня. Так что схожу.