TSQL вставки и обновления - PullRequest
2 голосов
/ 08 августа 2011

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

Ответы [ 5 ]

3 голосов
/ 08 августа 2011

Для SQL Server 2008+ существует команда MERGE , которую необходимо учитывать.

1 голос
/ 08 августа 2011

Вставка или обновление T-SQL

- хороший пример того, что вы хотите.Собственно, сам вопрос показывает решение:)

1 голос
/ 08 августа 2011

Одна хитрость - добавить поле ID к параметрам.Если ID -1, вставьте новую запись.Если что-то еще, обновите.

0 голосов
/ 09 августа 2011

Это можно сделать внутри одной хранимой процедуры, просто используя Labels .

Например:


CREATE PROCEDURE dbo.spAddUpdateXXXXXXX

@UniqueId bigint,
@Value01    int,
@Value02  varchar(50),
/*
Other Inputs Go Here
*/
@ValueEnd datetime

AS

Set NoCount On

IF @UniqueId &lt 1 GOTO InsertRecord

--------------------------------------------------------------------
UpdateRecord:
--------------------------------------------------------------------
UPDATE myTable
SET
Bla
Bla
Bla

GOTO EndProcessing

--------------------------------------------------------------------
InsertRecord:
--------------------------------------------------------------------
INSERT INTO myTable
Bla
Bla
Bla

GOTO EndProcessing

--------------------------------------------------------------------
EndProcessing:
--------------------------------------------------------------------
RETURN 0

Set NoCount Off

0 голосов
/ 08 августа 2011

Возможно, вы сможете обработать все внешне как обновление, а затем заменить вставку, если запись не существует, но не уверены, что это будет проще или чище. Другой вариант может состоять в том, чтобы создать обобщенную хранимую процедуру для любого текста, а затем передать имя поля процедуре, но это подвергает вашу хранимую процедуру хакерским атакам и таким образом отрицает преимущества безопасности хранимой процедуры. У меня есть обобщенный класс для textField и обобщенная таблица для текста, где таблица textField имеет fieldID как часть ключа, поэтому в нем размещается несколько текстовых полей. Из класса textField я вызываю SQL напрямую, но я мог бы повторно использовать его для вызова хранимой процедуры. Тогда у меня есть еще одна обобщенная таблица и класс для полей даты ...

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