Исходя из ваших комментариев к другим ответам, я бы предложил изменить TeamID с первичного ключа (если это возможно) и установить новый столбец Idx в качестве первичного ключа.Затем вы можете установить триггер в вашей БД, который при вставке новой записи с дубликатом TeamID обновит исходную запись и удалит новую.
Если это невозможно, я бы изменил хранимую процедурукоторый вставляет запись, так что вместо простой вставки сначала проверяется дубликат TeamID.Если дублирующего идентификатора нет, запись может быть вставлена, в противном случае будет просто «Выбрать 0».
Пример псевдокода:
Declare @Count int
Set @Count = (Select Count(TeamId) From [Table] where TeamId = @TeamId)
If(@Count > 0)
Begin
Select 0
End
Else
--Insert Logic Here
Затем ваш метод вставки в коде.вместо ExecuteNonQuery () может быть ExecuteScalar ().Ваш код будет обрабатывать это таким образом
If(_teams.TableAdapter.Insert(_teamId, _teamName) == 0)
{
_teams.TableAdapter.Update(_teamId, _teamName)
}
В качестве альтернативы, если вы просто хотите обработать все это в SQL (так что ваш код C # не должен изменяться), вы можете сделать что-то вроде этого:
Declare @Count int
Set @Count = Select Count(TeamId) from [Table] Where TeamId = @TeamId
If(@Count > 0)
Begin
//Update Logic
End
Else
Begin
//Insert Logic
End
Но, опять же, я бы просто изменил таблицу, если это возможно.