Форум: "Базы";
Текущий архив: 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.038 c