什么是插入然后用tsql选择的有效方法?

时间:2011-10-25 10:42:37

标签: c# sql-server tsql

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

最好的方法是什么? 我的问题是插入然后选择。这似乎效率低下。

2 个答案:

答案 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)

如果记录不存在,并且你必须创建它,那么你在这个问题上没有太多选择。例外情况可能是,如果有问题的表没有标识列,或者任何计算列,您输入的内容基本上都是。然后你可以插入它,然后只是从你输入的默认值返回你自己初始化的对象。

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