Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Хранение контрольной суммы строки в той же строке  [new]
casu
Member

Откуда:
Сообщений: 133
Необходимо хранить контрольную сумму важных полей строки - в поле той же строки.
Важные поля в таблице #myTable: FLD1 и FLD2 и мне нужно следить за тем изменялись они или нет.
Поле ID в реальных таблицах автоинкрементное.
Реализовываю так:
CREATE TABLE #myTable (ID int, FLD1 int, FLD2 nvarchar(256), CS int);
GO

DECLARE @T TABLE (ID int, CS int)

INSERT INTO #myTable 
OUTPUT inserted.ID, BINARY_CHECKSUM(inserted.FLD1, inserted.FLD2) INTO @T
VALUES (1, 100, 'some bla-bla-bla', NULL);

UPDATE #myTable SET CS = (SELECT CS FROM @T) WHERE ID = (SELECT ID FROM @T)

SELECT * from #myTable;
DROP TABLE #myTable;


Не слишком криво?
13 мар 15, 23:42    [17383266]     Ответить | Цитировать Сообщить модератору
 Re: Хранение контрольной суммы строки в той же строке  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
declare @t table (id int, fld1 int, fld2 nvarchar(256), cs as binary_checksum(fld1, fld2));

insert into @t values (1, 100, 'some bla-bla-bla');
select * from @t;
14 мар 15, 00:04    [17383309]     Ответить | Цитировать Сообщить модератору
 Re: Хранение контрольной суммы строки в той же строке  [new]
casu
Member

Откуда:
Сообщений: 133
invm, спасибо
14 мар 15, 00:44    [17383381]     Ответить | Цитировать Сообщить модератору
 Re: Хранение контрольной суммы строки в той же строке  [new]
aleks2
Guest
invm
declare @t table (id int, fld1 int, fld2 nvarchar(256), cs as binary_checksum(fld1, fld2));

insert into @t values (1, 100, 'some bla-bla-bla');
select * from @t;


Стисняюсь спросить: а как по такой checksum вы собираетесь "следить за тем изменялись они или нет"?

Проще надо.
INSERT INTO #myTable 
VALUES (1, 100, 'some bla-bla-bla', BINARY_CHECKSUM(1, 100));
14 мар 15, 08:54    [17383653]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить