Подскажите плз такой вопрос, есть у меня программа (на Ц++ но не важно) которая работает с БД (через ADO). И такая ситуация — программа должна проапдейтить запись в таблице но если записи там нет то вставить новую запись. Сейчас мне приходится делать селект и если мол число записей одын то апдейтить запись а если ноль то добавлять новую.
Т.е. сейчас мой код выглядит примерно так
Но есть у меня внутреннее ощущение продиктованное интуицией и опытом что что-то тут не так (прямо таки внутренний протест — вот что хотите делайте но не так тут энергия Ци течет) и можно это сделать как то красивее или проще? Есть ли более правильные решения? Если спрашивать еще точнее — можно ли обойтись без селекта и если да то как?
Здравствуйте, LowCoder, Вы писали:
LC>Т.е. сейчас мой код выглядит примерно так
LC>Но есть у меня внутреннее ощущение продиктованное интуицией и опытом что что-то тут не так (прямо таки внутренний протест — вот что хотите делайте но не так тут энергия Ци течет) и можно это сделать как то красивее или проще? Есть ли более правильные решения? Если спрашивать еще точнее — можно ли обойтись без селекта и если да то как?
IF EXISTS(SELECT ... FROM ....) THEN UPDATE ... ELSE INSERT .....
и завернуть в хранимую процедуру например + звать ее при необходимости INSERT или UPDATE.
Здравствуйте, LowCoder, Вы писали:
LC>Подскажите плз такой вопрос, есть у меня программа (на Ц++ но не важно) которая работает с БД (через ADO). И такая ситуация — программа должна проапдейтить запись в таблице но если записи там нет то вставить новую запись. Сейчас мне приходится делать селект и если мол число записей одын то апдейтить запись а если ноль то добавлять новую.
Какая БД ? Если Oracle или SQL Server 2005 — 2008, то можно использовать MERGE.
Здравствуйте, Flying Dutchman, Вы писали:
FD>Здравствуйте, LowCoder, Вы писали:
LC>>Подскажите плз такой вопрос, есть у меня программа (на Ц++ но не важно) которая работает с БД (через ADO). И такая ситуация — программа должна проапдейтить запись в таблице но если записи там нет то вставить новую запись. Сейчас мне приходится делать селект и если мол число записей одын то апдейтить запись а если ноль то добавлять новую.
FD>Какая БД ? Если Oracle или SQL Server 2005 — 2008, то можно использовать MERGE.
Спасибо ответившим — хранимкм мне не подходят в силу разных причин — гнадо сделать в проге
Очень инетерсный совет дали на мой вопрос (тем кому интерсно)
Здравствуйте, LowCoder, Вы писали:
LC>Но есть у меня внутреннее ощущение продиктованное интуицией и опытом что что-то тут не так (прямо таки внутренний протест — вот что хотите делайте но не так тут энергия Ци течет) и можно это сделать как то красивее или проще? Есть ли более правильные решения? Если спрашивать еще точнее — можно ли обойтись без селекта и если да то как?
Ну скажем, можно сразу сделать UPDATE, а если кол-во обновлённых строк равно нулю (В ADO Execute в параметре возвращается), то делать INSERT.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, LowCoder, Вы писали:
LC>Подскажите плз такой вопрос, есть у меня программа (на Ц++ но не важно) которая работает с БД (через ADO). И такая ситуация — программа должна проапдейтить запись в таблице но если записи там нет то вставить новую запись. Сейчас мне приходится делать селект и если мол число записей одын то апдейтить запись а если ноль то добавлять новую.
...
LC>Но есть у меня внутреннее ощущение продиктованное интуицией и опытом что что-то тут не так (прямо таки внутренний протест — вот что хотите делайте но не так тут энергия Ци течет) и можно это сделать как то красивее или проще? Есть ли более правильные решения? Если спрашивать еще точнее — можно ли обойтись без селекта и если да то как?
Я делаю так: Тут мой ADO-велосипед, но, думаю, смысл ясен
Можно merge использовать, но это 2008+ и такая же база
Варианты делать insert, ловить exception, IMHO, потерь больше.
А для update все-равно select нужен...