Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

calculate string SQL server 20005   Найти похожие ветки 

 
Memed_1971   (2007-10-02 08:21) [0]

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


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

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;
       }
   };
 
}


 
stone ©   (2007-10-02 16:32) [2]


> 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:38) [3]

sp_executesql  ne razresatesya izpolzovat v funkchii....


 
stone ©   (2007-10-02 16:38) [4]


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

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


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


> Memed_1971   (02.10.07 16:38) [3]


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


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

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.


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


> 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 17:11) [8]

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


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


> Memed_1971   (02.10.07 17:11) [8]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2008.02.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
15-1200432139
ProgRAMmer Dimonych
2008-01-16 00:22
2008.02.17
О высоком (астрономии)


2-1201103401
smartleds
2008-01-23 18:50
2008.02.17
Народ , подскажите как мне Track Bar правильно на форме разместит


2-1201253023
Lexa11_2002
2008-01-25 12:23
2008.02.17
TCheckListBox


2-1201345193
Саша
2008-01-26 13:59
2008.02.17
OpenDialog


15-1200305773
AntiUser
2008-01-14 13:16
2008.02.17
Oracle.