我希望我能够忽略一些非常简单的问题。我有一个费用计算查询,我需要编写,利用许多表中的规则来计算。其中一个表格定义了特定费用适用的条件。我希望避免使用动态SQL但是如果需要它请注意我在主程序中使用了几个CTE。
我已将存储过程简化为以下内容,以便很好地说明问题。我需要将[Formula]的内容应用为case语句中的布尔表达式,但我仍然收到错误:
在预期条件的上下文中指定的非布尔类型的表达式,接近' THEN'
如果将字段公式替换为实际内容,则可以根据需要使用。
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