Извините за плохой титул, я еще не придумал лучшего.Вставьте несколько записей со значениями, основанными друг на друга
В настоящее время я оптимизирую инструмент, который в основном делает тысячи выборок и вставок.
Предположим следующее соотношение
class A
{
public long ID; // This is an automatic key by the sqlserver
...Some other values
}
class B
{
public long RefID // Reference to A.ID;
... some other values...
}
class C
{
public long RefID // Reference to A.ID;
... some other values
}
Что в настоящее время происходит является ВЫБРАТЬ, чтобы получить Objecta, , если оно не существует, создайте новый. Запрос возвращает идентификатор (OUTPUT INSERTED.ID)
Затем он выбирает (вставки, если не несуществующие) объекты В и С.
Есть ли способ, чтобы сжать это в одном операторе SQL?
Im борется за ту часть, где происходит автоматическая генерация объекта A.
Так он должен сделать что-то вроде этого:
IF NOT EXISTS(SELECT * FROM TableA WHERE someConditions)
INSERT... and get the ID
ELSE
REMEMBER THE ID?
IF NOT EXISTS(SELECT * FROM TableB WERE RefID = ourRememberedID)
INSERT...
IF NOT EXISTS(SELECT * FROM TableC WERE RefID = ourRememberedID)
INSERT...
Пожалуйста, обратите внимание, что хранимые процедуры не могут быть использованы.
Вы можете использовать процедуру, которая делает все это, затем вы вызываете процедуру передачи любых значений, которые вы хотите, и выполняете логику в одном вызове. –
К сожалению, хранимые процедуры не являются опцией в этой среде ... – CSharpie
Сохраненные процедуры не являются опцией? В 2014? –