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

Откуда: Самара
Сообщений: 234
Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):


Evaluates a character expression and returns the result.

EVALUATE(cExpression)
9 окт 13, 08:55    [14942896]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):  [new]
qwerty112
Guest
alm2,

встроенной - нет,
но несложно "наваять" свою
declare @expression nvarchar(max)
declare @params nvarchar(max)
declare @sql nvarchar(max)
declare @result sql_variant

set @expression='1+2*sin(pi()/4)'

set @params='@resultOUT sql_variant output'
set @sql='select @resultOUT='+@expression

exec sp_executesql @sql, @params, @resultOUT=@result output
select @result

------------------
2,41421356237309
9 окт 13, 09:14    [14942943]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):  [new]
alm2
Member

Откуда: Самара
Сообщений: 234
set @expression='5>6'


не работает !

Нужно для логических выражений возвращать TRUE - FALSE
9 окт 13, 09:39    [14943032]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):  [new]
Glory
Member

Откуда:
Сообщений: 104751
alm2
set @expression='5>6'


не работает !

Потому что в TSQL и просто так 5>6 не работает
Сначала напишите валидный скрипт, а потом уже его выполняйте динамически
9 окт 13, 09:43    [14943041]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):  [new]
PaulWist
Member

Откуда:
Сообщений: 2267
alm2
set @expression='5>6'


не работает !

Нужно для логических выражений возвращать TRUE - FALSE


Дык, надо писать в том синтаксисе который понимает конкретный прогр. продукт, или вы считаете, что синтаксис фокса поддерживается всеми ПО от MS :)

declare @expression nvarchar(max)
declare @params nvarchar(max)
declare @sql nvarchar(max)
declare @result sql_variant

set @expression=' case when 5<6 then 1 else 0 end'

set @params='@resultOUT sql_variant output'
set @sql='select @resultOUT='+@expression

exec sp_executesql @sql, @params, @resultOUT=@result output
select @result
 
9 окт 13, 10:00    [14943096]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):  [new]
alm2
Member

Откуда: Самара
Сообщений: 234
Хотел сделать в виде скалярной функции - см ниже - но при запуске ругается, нельзя использовать EXEC



Конечная цель у меня такая:
В таблице MTD есть поле с условием возраста - например поле USLAGE содержащее ">7"

Хочу делать запрос - передавать возраст tekAGE - и получать выбрку соответствующую этому возрасту:

sele * from MTD where my_age2(tekAGE, mtd.USLAGE)



----------------
ALTER FUNCTION [dbo].[my_age2]
(
-- Add the parameters for the function here
@age_ nvarchar(2),
@age_field_ nvarchar(20)
)
RETURNS sql_variant
AS
BEGIN
declare @expression nvarchar(max)
declare @params nvarchar(max)
declare @sql nvarchar(max)
declare @result sql_variant


set @expression=' case when '+ @age_ + @age_field_ + ' then 1 else 0 end'
set @params='@resultOUT sql_variant output'
set @sql='select @resultOUT='+@expression

exec sp_executesql @sql, @params, @resultOUT=@result output


-----------

-- Return the result of the function
RETURN @result

END

----------------
9 окт 13, 12:44    [14944148]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):  [new]
Glory
Member

Откуда:
Сообщений: 104751
alm2
но при запуске ругается, нельзя использовать EXEC

Раз пишет, что нельзя, то значит нельзя

alm2
Конечная цель у меня такая:
В таблице MTD есть поле с условием возраста - например поле USLAGE содержащее ">7"

Хочу делать запрос - передавать возраст tekAGE - и получать выбрку соответствующую этому возрасту:

Я вам уже один раз говорил. Не надо приемы одного языка программирования слепо тащить в другой.
9 окт 13, 14:40    [14945092]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server функция, аналогичная из Visual FOX EVALUATE(cExpression):  [new]
KRS544
Member

Откуда:
Сообщений: 497
select * from MTD
where tekAGE>case when substring(USLAGE,1,1)='>' then cast(substring(USLAGE,2,len(USLAGE)) as int) else 0 end
and tekAGE<case when substring(USLAGE,1,1)='<' then cast(substring(USLAGE,2,len(USLAGE)) as int) else 100000000 end
9 окт 13, 16:49    [14946354]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить