Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

calculate string SQL server 20005 [MSSQL]


Memed_1971 ©   (2007-10-02 08:21:00) 

U menya est expression v formate string ( naprimer '100/500*(5+12)')
xochu v odnoy function poluchit resutat etogo expretiona.
pri pomosi komandi exec etot expretion vipolniyaetsa no nikak resultat ne mogu na peremenniyu vzyat sp_execsql normalno raboptaet no v funkchii ne razresaetsya ego ispolzovanie. Mne nujen chtobi eto bila v SQL servere


b z   (2007-10-02 17:32:00) [1]


> Memed_1971   (02.10.07 17:11) [8]

http://msdn2.microsoft.com/ru-ru/library/ms186755.aspx
оттуда

EXTERNAL NAME ... Если имя класса через точку (.) предваряется квалификатором пространства имен, то оно должно быть заключено в квадратные скобки ([ ]) или двойные кавычки (" ")...

там и пример есть


Memed_1971   (2007-10-02 17:11:00) [2]

EXTERNAL NAME ArithmeticCalculations.ArithmeticCalculations.EvluateArithmethicExpression
Asmname.Classname.Functionname


b z   (2007-10-02 16:59:00) [3]


> Memed_1971   (02.10.07 16:49) [6]

а если так
EXTERNAL NAME ArithmeticCalculations.ArithmeticCalculations.ArithmeticCalculations.EvaluateAri thmethicExpression
или

EXTERNAL NAME [ArithmeticCalculations].[ArithmeticCalculations.ArithmeticCalculations].[Evalua teArithmethicExpression]
?


Memed_1971   (2007-10-02 16:49:00) [4]

sp_executesql  probival ne rasresaet daet msg chto v funkchii ne rasresaetsya ispozovanie procedur ili extended function. ya daje probival cherez Exec Vipolnit i zapisat v temp table v funkchii ne razresaetsya Insert Update Delete. vezde tolko ukazivaetsya chto doljen sozdat Assembly. Takoy kod nasel(kod sverxu) sozdal dll  no nikak ne mogu vipolnik komandu
CREATE FUNCTION EvaluateArithmethicExpression (
  @p_formula VARCHAR(500))
 RETURNS BIT
EXTERNAL NAME ArithmeticCalculations.ArithmeticCalculations.EvaluateArithmethicExpression
daet osibku chto ne mojet naxodit class ArithmeticCalculations a tam etot class est.


Gadenysh   (2007-10-02 16:41:00) [5]


> Memed_1971   (02.10.07 16:38) [3]


ты хоть бы попробовал готовый код [2], а потом говорил, разрешается или нет


Memed_1971   (2007-10-02 16:38:00) [6]

sp_executesql  ne razresatesya izpolzovat v funkchii....


stone   (2007-10-02 16:38:00) [7]


> Memed_1971   (02.10.07 16:38) [3]
> sp_executesql  ne razresatesya izpolzovat v funkchii....
>

ты вот то что синеньким написано запусти на выполнение


stone   (2007-10-02 16:32:00) [8]


> sp_execsql normalno raboptaet no v funkchii ne razresaetsya
> ego ispolzovanie

это кто тебе такое сказал?
К тому же, кто мешает обернуть все это в процедуру с out-параметрами?
Ну если уж очень хочется именно функцию...

create function test_expr
(@Expr nvarchar(max))
returns float
AS
BEGIN
declare
@result float,
@sql nvarchar(max)
set @sql = N'select @result_out = ' + @Expr
 
EXECUTE sp_executesql @sql, N'@result_out float output', @result_out = @result OUTPUT;
return @Result
END
go

declare
@result float

exec  @result = dbo.test_expr '100/500.00*(5+12)'

select @result


Memed_1971   (2007-10-02 16:19:00) [9]

nasel odnu C# funkchiyu. no nikak ne mogu pribavit eto v spisok funkchii
CREATE FUNCTION EvaluateArithmethicExpression (
   @p_formula VARCHAR(500))
  RETURNS BIT
EXTERNAL NAME ArithmeticCalculations.ArithmeticCalculations.EvaluateArithmethicExpression
Daet asibku Msg 6505, Level 16, State 1, Procedure EvaluateArithmethicExpression, Line 1
Could not find Type 'ArithmeticCalculations' in assembly 'ArithmeticCalculations'.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Xml;
using System.Xml.XPath;
using System.IO;
using System.Text.RegularExpressions;

namespace ArithmeticCalculations
{
   public partial class ArithmeticCalculations
   {
       // dummy doc for XPath eval's
       static readonly XPathDocument xpdoc;
       
       [Microsoft.SqlServer.Server.SqlFunction]
       public static SqlDouble EvaluateArithmethicExpression(SqlString expression)
       {
           // give me a null and you will get on back
           if (expression.IsNull)
           {
               return SqlDouble.Null;
           }
           // use regex's to convert typical arithmetic ops to the ones XPath likes
           // also force the result to be a double
           String useExpression = "number(" + Regex.Replace(expression.Value, "/", " div ") + ")";
           useExpression = Regex.Replace(useExpression, "%", " mod ");
           XPathNavigator nav = xpdoc.CreateNavigator();
           SqlDouble retval = SqlDouble.Null;
           try
           {
               retval = (Double)nav.Evaluate(useExpression);
           }
           catch
           {
               // if its not a plain ol' arithmetic expression
               // you will get a null back
               retval = SqlDouble.Null;
           }
           return retval;
       }
   };
 
}


Наверх

Титульная страница Поиск, карта сайта Написать письмо