对于给定的Id,我想从DB表中选择一条记录。 如果记录不存在,我想插入一些默认值并返回记录。
最好的方法是什么? 我的问题是插入然后选择。这似乎效率低下。
答案 0 :(得分:2)
我会尝试使用“WHERE NOT EXISTS”条件插入,然后选择我们知道的那一行肯定存在的行*:
INSERT INTO <Table> (<Columns>)
SELECT <Column Values> WHERE NOT EXISTS(SELECT * FROM <Table> WHERE <Key Column Match Conditions>)
SELECT <Select Columns Needed> FROM <Table> WHERE <Key Column Match Conditions>
这样做的好处是它总是会向调用它的任何东西返回一个结果 - 一些解决方案(例如INSERT with OUTPUT和SELECT,无论哪种方式)都会产生多个结果集,这可能不适用于消耗输出的任何东西
*除非你也参加了从表中删除的可能性 - 但你还没有提到这种可能性,所以我们不知道如果在插入后立即发生删除,那么所需的输出是什么。
答案 1 :(得分:0)
如果记录不存在,并且你必须创建它,那么你在这个问题上没有太多选择。例外情况可能是,如果有问题的表没有标识列,或者任何计算列,您输入的内容基本上都是。然后你可以插入它,然后只是从你输入的默认值返回你自己初始化的对象。
但是,如果您正在使用标识列或数据库插入将为您提供的任何其他内容(包括触发器),那么除了在插入后选择数据后,您无能为力。