Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
NOT FOR REPLICATION для IDENTITY поля не работает при репликации???!!!(MS SQL7)
|
|||
|---|---|---|---|
|
#18+
Привет всем!MS SQL7 Tran Repl Переделал базу - для всех полей IDENTITY дописал NOT FOR REPLICATION и счастливый ждал что у меня все реплицируется, а он мне опять что не может в это поле вставить без IDENTITY_INSERT is ON, так что опять возвращаюсь к процедурам для вставки при репликации, где включаю вставку в идентити,вставляю запись, отключаю вставку. СКАЖИТЕ КТО НИБУДЬ ДЛЯ ЧЕГО ТОГДА ПИСАТЬ ДЛЯ IDENTITY поля NOT FOR REPLICATION??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2001, 11:47 |
|
||
|
NOT FOR REPLICATION для IDENTITY поля не работает при репликации???!!!(MS SQL7)
|
|||
|---|---|---|---|
|
#18+
Ключ not for replication полезно использовать, когда на реплицирующихся базах существует разделение диапазонов ID колонок. Поясню это на примере. Сначала - без использования not for replication. Итак, 2 базы. В каждой из них есть таблица create table t1( objectID int identity(1, 1) primary key, objectName nvarchar(100) ) Налаживаем между ними репликацию таблицы t1. Желательно не постоянную, а "synchronize on demand only" - в этом случае легко будет проследить поведение репликации. И при создании публикации не забудьте сказать, что таблицу не надо грохать и создавать по новой. Делаем по инсерту в каждую таблицу insert into test1..t1 (objectName) values ('name1') insert into test2..t1 (objectName) values ('name2') В обе таблицы вставились значения с objectID = 1. И проводим синхронизацию. Получаем отлуп на подписчике, потому что конфликт - ID один и тот же. -------------------------------------- Изменим ситуацию. Пусть для первой базы identity начинается с 1, а для второй - с 1000 create table test1..t1( objectID int identity(1, 1) primary key, objectName nvarchar(100) ) create table test2..t1( objectID int identity(1000, 1) primary key, objectName nvarchar(100) ) Опять налаживаем репликацию, делаем инсерты (причем в первую таблицу строка вставится со значением ID = 1, а во вторую - ID = 1000), синхронизуем, отлуп не получаем, потому что ID разные. Теперь делаем еще по одному инсерту insert into test1..t1 (objectName) values ('name11') insert into test2..t1 (objectName) values ('name22') И -- внимание!!! -- для таблицы во первой базе identity ПЕРЕСТАВИЛСЯ с 2 на 1001, то есть последующий инсерт в нее приведет к вставке значения с ID = 1001, а не 2, как мы ожидаем. В результате ломается диапазон значений и последующие синхронизации облажаются. -------------------------------------- И вот теперь меняем структуру таблицы следующим образом: create table t1( objectID int identity(1, 1) not for replication primary key, objectName nvarchar(100) ) create table t1( objectID int identity(1000, 1) not for replication primary key, objectName nvarchar(100) ) Вот в этом случае после инсертов конфликтов происходить не будет, и identity сбиваться тоже не будет. В BOL хорошая статья на эту тему: "Use the NOT FOR REPLICATION Option on the IDENTITY Property" Вылезает она сразу же на индекс NOT FOR REPLICATION option. Сорри, что так много написано, но хотелось проиллюстрировать подробно, шаг за шагом влияние тех или иных параметров. -------------------------------------- К вопросу о конфликтах identity колонок. Намного удобнее в качестве primary key использовать поле типа uniqueidentifier с default'ом newid(). Смысл тот же самый, а проблем куда меньше. И с репликацией в том числе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2001, 15:03 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3581&tid=1826952]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 317ms |

| 0 / 0 |
