Какой эффективный способ вставить, а затем выбрать с помощью tsql? - PullRequest
0 голосов
/ 25 октября 2011

Для данного идентификатора я хочу выбрать запись из таблицы БД.Если запись не существует, я хочу вставить ее с некоторыми значениями по умолчанию и вернуть запись.

Каков наилучший способ сделать это?Моя проблема - вставить, а затем выбрать.Это кажется неэффективным.

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Я попытался бы вставить с условием «ГДЕ НЕ СУЩЕСТВУЕТ», а затем выбрать строку, которая, как мы знаем, определенно существует в этой точке *:

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, в любом случае) выдают несколько наборов результатов, которые могут не работать хорошо с тем, что потребляет вывод.


*Если вы не находитесь в гонке с потенциальным удалением из таблицы - но вы еще не упомянули об этой возможности, поэтому мы не знаем, какой будет желаемый результат, если удаление произойдет сразу после вставки.

0 голосов
/ 25 октября 2011

Если запись не существует, и вам нужно ее создать, у вас нет большого выбора в этом вопросе. Исключением из этого может быть случай, если в рассматриваемой таблице нет столбца идентификаторов или каких-либо вычисляемых столбцов, и то, что вы вводите, - это в основном все, что есть. Затем вы могли бы потенциально вставить его, а затем просто вернуть объект, который вы сами инициализировали, из значений по умолчанию, которые вы указали.

Однако, если вы используете столбцы идентификаторов или что-либо еще, что вставка базы данных предоставит вам (включая триггеры), то вы ничего не можете сделать, кроме как выбрать данные обратно после вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...