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

Откуда:
Сообщений: 116
Добрый день.

Вопрос задача вычисления арифметических выражений заданых пользователем. То есть, например, имеется строка вида (введенная пользователем): "pole1 + pole2 / pole3"
Нужно вычислить значение на стороне SQL Server. Pole1, Pole2, Pole3 - все значения имеются в базе.

Вижу пока два варианта:
1. Написать CLR функцию.
2. Использовать insert ... exec ... Типа такого:
declare @s varchar(1000) = 'select 1 + 2.0 / 3'
declare @t table (res numeric(19, 4))
insert @t exec(@s)
declare @z numeric(19, 4) = (select top 1 res from @t)
select @z

Ес-но во втором случае нужно следить за тем, что пользователь может в выражению написать, плюс немозможность использования insert ... exec ... в функциях.

Может есть какой то еще механизм? Кто-нить подскажет.
Вычислить выражение нужно именно на SQL сервере.
17 мар 14, 12:17    [15737166]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
DSQL.. вот только с проверками запутаетесь.. ведь юзер может ввести что угодно вообще
17 мар 14, 12:18    [15737180]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
vdp
Member

Откуда:
Сообщений: 116
Maxx
DSQL.. вот только с проверками запутаетесь.. ведь юзер может ввести что угодно вообще

А почему не первый вариант с CLR? Там и проверки не нужны.
17 мар 14, 12:26    [15737259]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Вы не полностью описываете задачу, поэтому что-то конкретное предложить невозможно.
17 мар 14, 12:29    [15737297]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
vdp
Member

Откуда:
Сообщений: 116
Владислав Колосов,

Подскажите чего не хватает - я это опишу.
17 мар 14, 12:31    [15737324]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Вы описываете два решения задачи, но начальные условия неизвестны. То поля, то константы. Мне непонятно, например, причем здесь INSERT.
Что из чего надо получить?
17 мар 14, 12:35    [15737368]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
vdp
Member

Откуда:
Сообщений: 116
Часть информации о определенных объектах в системе пользователь может сам спроектировать за помощью таких контролек как combo, textfield, datefield, checkbox, grid, numberfield. В этих последних пользователю нужно дать возможность вводить арифметические выражения, где он может использовать значения с других numberfield.
17 мар 14, 12:39    [15737403]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
vdp
Member

Откуда:
Сообщений: 116
Владислав Колосов
Вы описываете два решения задачи, но начальные условия неизвестны. То поля, то константы. Мне непонятно, например, причем здесь INSERT.
Что из чего надо получить?


константы написаны как пример

пользователь будет вводить что-то типа такого
{$1} + {$2} / {$3}
17 мар 14, 12:40    [15737412]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
vdp
Member

Откуда:
Сообщений: 116
И потом эти {$1} {$2} {$3} подменятся на значения с БД.


insert нужен тут:

declare @s varchar(1000) = 'select 1 + 2.0 / 3'
declare @t table (res numeric(19, 4))
insert @t exec(@s)
declare @z numeric(19, 4) = (select top 1 res from @t)
select @z

чтобы получить результат вычисления
17 мар 14, 12:42    [15737435]     Ответить | Цитировать Сообщить модератору
 Re: вычисление выражений введенных пользователем  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Мне кажется, что проще полностью формировать запрос на стороне клиента и выполнять полученное выражение.
17 мар 14, 16:07    [15739444]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить