Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MSSQL 2005. Вставить или изменить записи в зависимости от заданного параметра  [new]
ParamN
Guest
Доброе время суток. Такая ситуация: имеется ХП, на вход которой подаются 5 параметров. Все эти параметры одного типа (float), и являются параметрами некоего тех. процесса. Хранятся они так:
create table scl.ParamValues (
  id int not null identity,
  device_id int not null,
  type smallint not null check (type between 1 and 5),
  value float not null,
  constraint pk_scl_ParamValues primary key nonclustered (id),
  constraint uq_scl_ParamValues unique clustered (device_id, type),
  constraint fk_scl_ParamValues_device foreign key (device_id) references scl.Devices(id)
)

задача: если передано значение параметра not null, то при наличии записи с заданными (@device_id, @type) и значением value, отличающемся от заданного значения параметра, обновить эту запись, иначе - сделать вставку (@device_id, @type, @paramN). Сервер 2005-й, поэтому MERGE использовать не получится. Сейчас я пять раз вызываю ХП, в которой происходит следующее:
create procedure scl.up_ParamValueIU (
  @device_id int,
  @type smallint,
  @value float
)
as
begin
  if @value is null return;
  if not exists (
    select 1 from scl.ParamValues
    where device_id=@device_id ad type=@type
  )
    insert into scl.ParamValues(device_id, type, value)
      values(@device_id, @type, @value)
  else
    update scl.ParamValues
    set value=@value
    where device_id=@device_id ad type=@type and value<>@value
end;

и далее
exec scl.up_ParamValueIU @device_id, @type, @param1;
exec scl.up_ParamValueIU @device_id, @type, @param2;
...
exec scl.up_ParamValueIU @device_id, @type, @param5;

- мне такое решение не нравится раздельной обработкой каждой записи. Можно ли это сделать более кратко?
1 дек 14, 07:35    [16929251]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005. Вставить или изменить записи в зависимости от заданного параметра  [new]
Glory
Member

Откуда:
Сообщений: 104760
ParamN
Можно ли это сделать более кратко?

Просто последовательно insert и update с соединением таблицы scl.ParamValues и таблицы с вашими "5 параметров"
1 дек 14, 09:06    [16929398]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить