如果结果不存在,则 MS SQL 插入
Posted
技术标签:
【中文标题】如果结果不存在,则 MS SQL 插入【英文标题】:MS SQL insert if not exist with a result 【发布时间】:2014-02-06 08:18:16 【问题描述】:我想使用像 .ini 文件这样的 SQL 表
所以:
select answer from x where (y=z)
if exists
return answer (from databse)
else
insert into x, (answer) where (y=z)
return answer (from default)
其中 answer 是默认值,可能会被查询更改。
如果可能的话,我想在一个查询中执行此操作,我可以分两个执行此操作,但我确信还有一种更优雅的方法。
【问题讨论】:
您可以在临时表中使用 OUTPUT 子句并从该临时表中进行选择。查看关于 OUTPUT 子句的 MSDN 文章。 为什么要插入?如果它不存在,为什么不继续获得默认值?如果您以静默方式插入,行为会如何变化,而不是以一种不好的方式,您无法更改默认值。我觉得你的想法很糟糕。插入应该是手动和仔细考虑的,而不是魔术 因为我的用户可能希望默认值为 30 或 70,或者“苹果”调整默认值的代码在别处。我的用户可能会决定他们想要测量多个值。我不知道,我在这里,他们在未来。 ini 文件很神奇,完全以这种方式工作,只需在记事本中打开它们,你就会咯咯地笑,但我不知道(我过去记得)我是否可以访问未来的用户文件系统。不知道波西米亚人的答案并不羞耻 【参考方案1】:假设表 c 具有当前配置的值,表 d 包含系统默认值
都带有字段 key(唯一约束)和 val
我可以使用联合查询来查找值
select top 1 * from (
select 'c' source, key, val from c
union all
select 'd', key, val from d
) x
where key = 'something'
order by source
如果存在则返回配置值,不存在则返回默认值。我有点同意@bohemian - 不确定我是否看到插入点,如果更改默认值,那么查询仍然有效。
如果你真的想做插入,可以考虑推出一个存储过程。
【讨论】:
【参考方案2】:不确定,为什么您将 DML 与 @Bohemian 提到的选择混合在一起 但在选择部分你可以做类似下面的事情
select
case
when exists(select answer from x where y=z) then answer
else (select answer from default) as answer
end
【讨论】:
以上是关于如果结果不存在,则 MS SQL 插入的主要内容,如果未能解决你的问题,请参考以下文章
SQL Select:如果存在则更新,如果不存在则插入 - 使用日期部分比较?