ПО ДУБЛИКАТУ КЛЮЧУ в MS SQL

В MySQL очень легко сделать двойные первичные ключи, а затем мы можем запустить

 INSERT INTO table x
SET
val = x,
val2 = y,
val3 = z,
ON DUPLICATE KEY SET val3 = z

Что экономит время вместо подсчета, а затем вставки или обновления в зависимости от результата.

Это кажется очень сложным в MS SQL с этим выбором MERGE синтаксис.

Мой вопрос заключается в том, могу ли я создать хранимую процедуру, в которой я передаю имя таблицы, поля, которые я хочу вставить, а затем значения, которые я хотел бы обновить.

Затем я хотел бы, чтобы хранимая процедура убрала этот шаг и просто либо обновляла, либо вставляла то, что необходимо — во многом как в MySQL.

Я не очень хорош с хранимыми процедурами в целом, и в настоящее время я прибегаю к удалению строк, а затем вставляю их обратно, поскольку это кажется самым простым делом.

Я использую PHP и MS-SQL 2012

0

Решение

Хорошо, я предполагаю, что здесь есть метод хранимой процедуры, но отсутствие ввода означает, что я в основном сделал функцию upsert.

Я сделал это взять таблицу, ключи, значения и параметры обновления.

public function upsert($table,$keys,$insert,$update) {

$query = $this->from($table)->select(null)->select('COUNT(1) AS c');
foreach($keys as $index=>$value) {
$query->where($index,$value);
}
$result = $query->fetchAll();

if($result[0]['c'] == 0) {
//insert!
$query = $this->insertInto($table,$insert);$query->execute();

}
else {
$query = $this->update($table,$update);
foreach($keys as $index=>$value) {
$query->where($index,$value);
}
$query->execute();

}

}

Это я добавил в свой объект fluentPDO, который я использовал, и запускает проверку обычным способом php. Возможно, это не самый лучший способ, но это работает для меня, и использование объекта PDO в середине для подключения к моей базе данных дает мне некоторый контроль над такими функциями, как эта.

Надеюсь, это кому-то пригодится.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]