问题是我试图将一些数据插入到我的SQL服务器数据库中,但由于某种原因,我不断收到臭名昭着的“无效列名”错误,因此没有插入任何数据。
现在,我相信我知道为什么(有点)这种情况正在发生,因为我试图使用案例查询插入基于另一列中字段值的值,但我不确定我我的确做得很好 - 见代码:
INSERT INTO dbo.table_name(points, discount)
VALUES
(3, CASE WHEN (points = 6) THEN 0.5 WHEN (points = 12) THEN 1.0 ELSE 0 END
我在“points”列上收到了无效的列名。它肯定存在,所以我认为我的查询不正确,或者我应该以不同的方式进行此操作?
我正在使用SQL Server 2008 R2 - 不确定这是否有所不同。
答案 0 :(得分:1)
VALUES部分中的数字3尚未成为“点”列,因此您无法在CASE语句中像这样引用它。您可以将查询重写为类似的内容:
INSERT INTO dbo.table_name(points, discount)
select
x.points
,CASE WHEN (x.points = 6) THEN 0.5 WHEN (x.points = 12) THEN 1.0 ELSE 0 END as discount
from (
select 3 as points union all
select 12
) x
答案 1 :(得分:1)
您想要以某种方式强制执行此业务逻辑吗?如果是这样,那么我认为你可能正在寻找一个计算列。
CREATE TABLE table_name
(
ID INT,
Points INT,
Discount AS CASE WHEN (Points = 6) THEN 0.5 WHEN (Points = 12) THEN 1.0 ELSE 0 END
)
这样,您插入表中的任何数据都将始终符合这些规则。
插入现在变得非常简单:
INSERT INTO table_name (Points) VALUES(6);
INSERT INTO table_name (Points) VALUES(5);
INSERT INTO table_name (Points) VALUES(12);