Проверить запись на различие, если надо то обновить.

sql123
Дата: 09.05.2015 14:19:32
Доброго дня. Использую Microsoft SQL Server 2008 R2.
Структура полей таблицы.
Id int Unchecked
kontr_id int Unchecked
tovar_id int Unchecked
ser_id int Unchecked
kolvo real Checked
summa real Checked
s_fg smallint Checked
Набор данных у меня берется из 1С, работаю объектами ADODB. Мне нужно проверить запись на различие с моими данными в 1С, их я могу представить в любом виде, если надо то обновить.
Так вот, как организовать проверку, лучше наверно в хранимой процедуре, полей kontr_id ,tovar_id, ser_id, kolvo ,summa, и если они изменились то перезаписать и в s_fg записать единицу, иначе ничего не делать. Тупо перебирать по одной записи и сравнивать по полям ничего пока не придумал. Заранее спасибо.
Добрый Э - Эх
Дата: 09.05.2015 14:31:45
sql123,

почитай про DML-оператор MERGE, может станет острее...
sql123
Дата: 09.05.2015 18:41:34
Если я правильно понимаю работу инструкции MERGE - это INSERT и UPDATE по принципу или-или. Мне не надо вставлять записи. Мне надо только из обновить, и только в том случае если они типа устарели.
SERG1257
Дата: 09.05.2015 19:01:58
Вставить во временную таблицу (bulk insert) написать
update data=t.data from yourtable y join #temptable t on y.id=t.id and y.data<>t.data
Добрый Э - Эх
Дата: 09.05.2015 19:34:02
sql123,

ты неправильно понимаешь... кляузы WHEN MATCHED / WHEN NOT MATCHED могут использоваться как вместе, так и каждая по отдельности. Соответственно, можно реализовать отдельно UPDATE, отдельно INSERT, их комбинацию и даже прикрутить удаление записей.
sql123
Дата: 12.05.2015 09:44:41
Подскажи, коли не в тягость, как в MERGE проверку сделать сравнение полей, которые уже есть в таблице и которые я на сервер БД гружу?
Akina
Дата: 12.05.2015 09:52:15
sql123
перезаписать и в s_fg записать единицу

UPDATE
sql123
организовать проверку ... полей kontr_id ,tovar_id, ser_id, kolvo ,summa, и если они изменились ... иначе ничего не делать

WHERE
Glory
Дата: 12.05.2015 09:53:43
sql123
Подскажи, коли не в тягость, как в MERGE проверку сделать сравнение полей, которые уже есть в таблице и которые я на сервер БД гружу?

https://msdn.microsoft.com/en-us/library/bb510625.aspx
Mind
Дата: 12.05.2015 22:35:44
sql123
Подскажи, коли не в тягость, как в MERGE проверку сделать сравнение полей, которые уже есть в таблице и которые я на сервер БД гружу?
INSTEAD OF Trigger on View
sql123
Дата: 25.05.2015 12:00:52
Вот такое нарисовал. Гляньте плиз.
MERGE tovar AS target
    USING tmp_tovar AS source
    ON ((target.id = source.id) AND (target.n_str = source.n_str) AND (target.kolvo <> source.kolvo))
    WHEN MATCHED THEN 
        UPDATE 
			SET kolvo = source.kolvo,
				s_fg = 1
			
	WHEN NOT MATCHED THEN
		INSERT (id, n_str, kontr_id,tovar_id,ser_id,kolvo,summa)
		VALUES (source.id,source.n_str, source.kontr_id,source.tovar_id,source.ser_id,source.kolvo,source.summa)
    ;