Главная страница
    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.039 c
15-1200041562
ZoldBerger
2008-01-11 11:52
2008.02.17
Написал программу DelphiDecompiler


2-1201085924
Rusl92
2008-01-23 13:58
2008.02.17
Печать таблицы из Бд


2-1201196422
repus
2008-01-24 20:40
2008.02.17
Тема игр РПГ


15-1200422033
slomalsa_comp
2008-01-15 21:33
2008.02.17
Не включается компьютер :( БИОС не пищит.


15-1200625207
Slider007
2008-01-18 06:00
2008.02.17
С днем рождения ! 18 января 2008 пятница





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский