使用tsql进行插入和选择的有效方法是什么?

本文关键字:有效 方法 是什么 选择 tsql 插入 使用 | 更新日期: 2023-09-27 18:12:14

对于给定的Id,我想从DB表中选择一条记录。如果记录不存在,我想用一些默认值插入它并返回记录。

这样做的最好方法是什么?我的问题是插入,然后选择。

使用tsql进行插入和选择的有效方法是什么?

我会尝试插入,带有"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与OUTPUT和SELECT,无论哪种方式)产生多个结果集,这可能不适合任何正在消耗输出的对象。


*除非您也在与潜在的表删除竞争-但是您还没有提到这种可能性,所以我们不知道如果在插入之后立即发生删除,那么期望的输出将是什么

如果记录不存在,而您必须创建它,那么您在这件事上没有太多选择。这种情况的例外可能是,如果所讨论的表没有标识列或任何计算列,并且您输入的基本上就是所有列。然后你可以插入它,然后返回一个你自己从你给它的默认值初始化的对象。

但是,如果您正在使用标识列或数据库插入将为您提供的其他任何内容(包括触发器),那么除了在插入后选择回数据之外,您不能做太多其他事情。