SQL запрос относительно вставки сек нет? - PullRequest
1 голос
/ 21 марта 2012
Name,Age,Seq

G,30,1
G,31,1
K,28,3
K,29,3
k,28,3
V,,4
V,28,4

У меня есть таблица со столбцами Name, Age, Seq, когда я вставляю первую строку, как это

G, 30, 1

Теперь я хочу всякий раз, когда я вставляю вторую строку с тем же последним номером. (1) в верхнем ряду строка должна заменить существующую строку.

как будто я вставляю G,32,1 теперь существующую запись G, 30, 1 следует заменить на G, 32, 1 потому что послед. (1) соответствует.

как мне этого добиться. мне нужен триггер.

примечание. Я хочу только вставить, а не обновлять оператор.

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

Ответы [ 4 ]

2 голосов
/ 21 марта 2012

Если я правильно понимаю, вам нужен один оператор, который будет либо вставлять, либо обновлять запись на основе seqno.Вы можете использовать Merge .

0 голосов
/ 21 марта 2012

это не слияние, данные находятся в одной таблице вам понадобится триггер INSTEAD OF INSERT

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

create trigger myTrigger
on myTable
instead of insert
as
begin
  declare @seq int

  select @seq = seq from inserted
  if exists (select 1 from myTable where seq= @seq) begin
    delete from myTable where seq=@seq
  end
  insert into myTable
  select * from inserted
end
0 голосов
/ 21 марта 2012

Вы, вероятно, ищете для оператора MERGE , который позволяет вам выполнить "Upsert": вставку или обновление в одном операторе (хотя вам все равно нужно быть немного осторожнее с блокировкойсм. http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx

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

0 голосов
/ 21 марта 2012

Используйте оператор слияния.Хорошую ссылку на это можно найти здесь:

http://technet.microsoft.com/en-us/library/bb510625.aspx

, а пример можно найти здесь

http://technet.microsoft.com/en-us/library/bb522522.aspx

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