Ich habe etwas Ähnliches und wenn Sie in einem kleineren Pool von Operationen spielen, ist es nicht so schwer. Ich ging mit einer Serie, in der ich X- und Y-Säulen und einen Operator hatte. Dann habe ich gerade einen großen Fall gemacht, als ich eine Aussage über die Identifizierung des Operators und die darauf basierende Logik getroffen habe. Möglicherweise müssen Sie Ihre Struktur etwas ändern. Der Kern des Problems besteht darin, dass SQL eine Ergebnismengen-basierte Engine ist. Alles, was Sie tun müssen, um eine Operation zu bestimmen, wird langsamer sein.Beispiel:
DECLARE @Formula TABLE
(
FormulaId INT IDENTITY
, FormulaName VARCHAR(128)
, Operator VARCHAR(4)
);
DECLARE @Values TABLE
(
ValueId INT IDENTITY
, FormulaId INT
, Price MONEY
, Size INT
)
INSERT INTO @Formula (FormulaName, Operator)
VALUES ('Simple Addition', '+'), ('Simple Subtraction', '-'), ('Simple Multiplication', '*'), ('Simple Division', '/'), ('Squared', '^2'), ('Grow by 20 percent then Multiply', '20%*')
INSERT INTO @Values (FormulaId, Price, Size)
VALUES (1, 10, 5),(2, 10, 5),(3, 10, 5),(4, 10, 5),(5, 10, 5),(6, 10, 5),(1, 16, 12),(6, 124, 254);
Select *
From @Values
SELECT
f.FormulaId
, f.FormulaName
, v.ValueId
, Price
, Operator
, Size
, CASE WHEN Operator = '+' THEN Price + Size
WHEN Operator = '-' THEN Price - Size
WHEN Operator = '*' THEN Price * Size
WHEN Operator = '/' THEN Price/Size
WHEN Operator = '^2' THEN Price * Price
WHEN OPerator = '20%*' THEN (Price * 1.20) * Size
END AS Output
FROM @Values v
INNER JOIN @Formula f ON f.FormulaId = v.FormulaId
Mit dieser Methode ist mein Betrieb wirklich nur ein Zeiger Verweis auf eine andere Tabelle, die einen Operator, der nur ein Zeichen Ich für meinen Fall Anweisung für alle Absichten und Zwecke ist wirklich hat. Sie können das sogar potentiell zusammensetzen und wenn Sie mehrere übergeben wollten, könnten Sie eine 'Gruppen' Spalte und eine 'Sequenz' hinzufügen und nacheinander tun. Es hängt davon ab, wie schwierig Ihre "Formeln" werden. Wenn Sie in mehr als 3 oder 4 Variablen kommen, die sich häufig mit häufigen Operatoränderungen ändern, dann würden Sie wahrscheinlich dynamische SQL machen wollen. Aber wenn es nur ein paar Dinge sind, sollte das nicht so schwer sein. Bedenken Sie jedoch, dass der Nachteil dieses Ansatzes darin besteht, dass er auf einer bestimmten Ebene fest codiert ist, aber flexibel ist, dass die Parameter, die in ihn eingegeben werden, diese Formel immer wieder anwenden können.
Es gibt keine einfache Möglichkeit, dies zu tun. Ein Ansatz würde einen Cursor und dynamisches SQL verwenden. –
Warum setzen Sie den Wert während der Aktualisierung nicht auf die berechnete Spalte in der Tabelle? Wenn Update geschieht nicht in SQL – ASpirin
Auch in SQL kann z. B. onupdate Trigger dynamische SQL ausführen, um Wert zu berechnen und in die Spalte – ASpirin