Я надеюсь, что я упускаю из виду что-то очень простое с моей проблемой.У меня есть запрос на расчет комиссионных, который мне нужно написать, для расчета используются правила во многих таблицах.Одна из таблиц определяет условия, при которых будет взиматься определенная плата.Я надеялся избежать динамического SQL, но, если это потребуется, обратите внимание, что у меня есть несколько CTE, которые используются в основной процедуре.
Я упростил хранимую процедуру до следующего, что хорошо иллюстрирует проблему.Мне нужно, чтобы содержимое [Formula] применялось как логическое выражение в операторе case, но я продолжаю получать ошибку:
Выражение не-логического типа, указанное в контексте, гдеожидается условие, близкое к 'THEN'
Если вы замените поле Formula фактическим содержимым, оно будет работать так, как вам нужно.
CREATE TABLE #FeeRule
(
FeeRuleID INT IDENTITY,
FeeName NVARCHAR(50),
FeeRate DECIMAL(10,2)
)
INSERT INTO #FeeRule
SELECT 'FlatFee', 450.00
CREATE TABLE #FeeCondition
(
ConditionID INT IDENTITY,
FeeRuleID INT,
Formula NVARCHAR(255)
)
INSERT INTO #FeeCondition
SELECT 1, 'StockType = 1'
CREATE TABLE #Accounts
(
ID INT IDENTITY,
AcctName NVARCHAR(200),
StockType INT
)
INSERT INTO #Accounts
SELECT 'Account One', 0 UNION ALL
SELECT 'Account Two', 1
SELECT
AcctName,
Fee = CASE
WHEN Formula IS NULL
THEN FeeRate
ELSE
CASE WHEN Formula -- StockType = 1 --
THEN FeeRate
ELSE 0
END
END
FROM
#Accounts A
JOIN
#FeeRule B ON 1 = 1
LEFT JOIN
#FeeCondition C ON C.FeeRuleID = B.FeeRuleID
DROP TABLE #FeeRule
DROP TABLE #FeeCondition
DROP TABLE #Accounts