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

C# 使用tsql插入然后选择的有效方法是什么?,c#,sql-server,tsql,C#,Sql Server,Tsql,对于给定的Id,我想从DB表中选择一条记录。 如果记录不存在,我想用一些默认值插入它并返回记录 最好的方法是什么? 我的问题是插入然后选择。这似乎效率低下。如果记录不存在,而您必须创建它,那么您在这件事上没有太多选择。例外情况可能是,所讨论的表没有标识列或任何计算列,并且您输入的内容基本上就是所有内容。然后,您可以潜在地插入它,然后只返回一个您自己初始化的对象,该对象是您输入的默认值 但是,如果您使用的是标识列或数据库插入将为您提供的任何其他内容(包括触发器),那么您只能在插入后选择返回的数据。

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

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

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


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

我将尝试使用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)会以任意方式生成多个结果集,这可能无法与使用输出的对象一起很好地工作


*除非您也在与表中可能的删除进行竞争-但是您还没有提到这种可能性,因此我们不知道如果在插入后立即进行删除,所需的输出会是什么。

您使用的是哪个数据库,比如说,可能适用于sql Server,您希望记录已经存在的时间百分比是多少?似乎是这样还是您证明了这一点?+1,我认为作者应该接受这个答案,而不是我的答案。我完全忘记了插入…到…选择范例。