Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.053 c
10-1108818250
ilias1979
2005-02-19 16:04
2008.02.17
как показать полностью документ в olecontainer


2-1200924371
zeroed
2008-01-21 17:06
2008.02.17
Коллекции объектов моего класса


2-1201086730
Guriev
2008-01-23 14:12
2008.02.17
Как расчитать количество рабочих дней между двумя датами?


2-1201283604
AntonUSAnoV
2008-01-25 20:53
2008.02.17
удаление строки в dbmemo


2-1201180928
Dennis I. Komarov
2008-01-24 16:22
2008.02.17
MultiSelect





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский