Speichern von Formeln in Spalten

By Frank Kalis

Posted on Aug 17, 2005 von in SQL Server

Wie könnte es aussehen, wenn man in einem so dynamischen Umfeld arbeitet, daß man selbst die mathematischen Berechnungsformeln nicht hart kodieren will...

Normalerweise ändern sich die Verfahren zur Berechnung innerhalb eines Programmes nicht sehr häufig. Der Einfachheit und Bequemlichkeit halber neigt man automatisch dazu, diese Formeln deshalb auch ""hart" im Quellcode festzuschreiben. Mal angenommen, man arbeitet jetzt aber in einer derart dynamischen Umgebung, daß man selbst die Formeln nicht im Quellcode hinterlegen will, sondern vielmehr in einer Spalte einer Tabelle. Ein Grund, der evtl. ein solches Szenario rechtfertigt, mögen komplexe Berechnungen sein, die "dynamisch" zusammengestellt werden. Also, wo anhand von Parametern gesteuert wird, welche Berechnungen mit welchen Formeln angestellt werden. Dies würde unter Umständen entweder sehr komplexe Stored Procedures hervorbringen oder sehr viele kurze. Egal, welche Gründe man nun hat, sich gegen eine Kodierung der Formeln im Quellcode zu entscheiden, hier ist ein Weg, mit dieser Situation umzugehen:

SET NOCOUNT ON
CREATE TABLE #formulas
( fID INT NOT NULL
 , formula NVARCHAR(20)
 CONSTRAINT pk_formula PRIMARY KEY (fID)
)

DECLARE @formula NVARCHAR(30)
DECLARE @sqltoexec NVARCHAR(30)
INSERT #formulas SELECT 1, '@a*@b*@c/@d'

DECLARE @a INT
DECLARE @b FLOAT
DECLARE @c INT
DECLARE @d INT
SELECT @a = 150000, @b = 0.9, @c = 21, @d = 31
SELECT @formula = 
 REPLACE(
  REPLACE(
   REPLACE(
    REPLACE(formula, '@a', @a
    ), '@b', @b
   ), '@c', @c
  ), '@d', @d
 )
  FROM #formulas
 WHERE fID=1
SET NOCOUNT OFF
SELECT @sqltoexec = 'SELECT ' +@formula
EXEC sp_ExecuteSQL @sqltoexec
DROP TABLE #formulas
                   
------------------ 
91451.612903

(1 row(s) affected)
Tags: Tags:
Dieser Eintrag wurde eingetragen von und ist abgelegt unter SQL Server. Tags: , ,

Noch kein Feedback


Formular wird geladen...