2015-08-31 3 views
0

Итак, вот моя ситуация. У меня есть данные, расположенные в базе данных ESRI SDE с версией SQL Server 2008 R2, для которой я хочу автоматически установить уникальный идентификатор. Я нашел сценарий, который хорошо работает в одной записи (он работает также для нескольких записей), который вытащит максимальный идентификатор из таблиц и добавит к нему один номер для вставки.SDE Auto ID on Вставить несколько записей

Проблема, с которой я столкнулся, связана с тем, как ESRI работает для вставки записей. Когда вы создаете данные в своем картографическом программном обеспечении (ArcMap) каждый раз, когда вы нажимаете «Сохранить», он действует как вставка в таблицу. Поэтому, если вам удастся сохранить сохранение после одной записи, а максимальный ID - 27, идентификатор новой записи/данных будет 28. Повторите это дело, но на этот раз вы создали две функции перед удалением save, это вставляет обе записи в таблицу в то же время, и каждая запись получает идентификатор 28 вместо 28 и 29 соответственно.

Все это, как я уже говорил, наклеил код, который я использую ниже, который работает как с исходным набором данных, так и с дельта-таблицей, созданной с его версией, но мне нужна помощь в выяснении того, как использовать максимальный ID из текущий набор данных для заполнения следующего идентификатора записи для каждой введенной записи без дублирования его на вставке с несколькими записями. Этот код ориентирован на идентификатор участка для границы участка, который во многих случаях мне может понадобиться разделить посылку, которая приведет к двум функциям, требующим уникальный идентификатор. Любые советы приветствуются и оцениваются

CREATE TRIGGER [dbo].[PARCEL_AUTO_ID] 
    ON [dbo].[a405] 
    FOR INSERT, UPDATE 
AS 
BEGIN 
    DECLARE @Max_Value int 
    SET @Max_Value = (SELECT MAX(PARCEL_ID) FROM [dbo].[TOWN_PARCELS])+1 

    UPDATE [dbo].[a405] 
    set PARCEL_ID = @Max_Value 
     WHERE PARCEL_ID IS NULL 

    UPDATE [dbo].[TOWN_BUILDING_FOOTPRINTS] 
    set PARCEL_ID = @Max_Value 
     WHERE PARCEL_ID IS NULL 
END 
+0

Спасибо jpw :) Я просто работал над его редактированием, чтобы правильно показывать. Очень благодарен за то, что я все еще правильно работаю над этим сайтом. –

+0

Если вы хотите отформатировать блоки кода, отметьте его и нажмите ctrl + k – jpw

ответ

0

Я понял, наконец. Это должно выглядеть так.

CREATE TRIGGER [dbo].[PARCEL_AUTO_ID] 
    ON [dbo].[a405] 
    FOR INSERT, UPDATE 
AS 
BEGIN 
    DECLARE @Max_Value int 
    SET @Max_Value = (SELECT MAX(PARCEL_ID) FROM [dbo].[a405])+1 

    UPDATE [dbo].[a405] 
    set PARCEL_ID = @Max_Value 
     WHERE PARCEL_ID IS NULL 

    UPDATE [dbo].[TOWN_BUILDING_FOOTPRINTS] 
    set PARCEL_ID = @Max_Value 
     WHERE PARCEL_ID IS NULL 
END 
Смежные вопросы