插入多个记录时的SDE自动ID

时间:2015-08-31 17:56:35

标签: database sql-server-2008-r2 versioning esri

所以这是我的情况。我有数据位于SQL Server 2008 R2版本的ESRI SDE数据库中,我希望自动填充一个唯一的ID。我找到了一个适用于单个记录插件的脚本(它也适用于多个记录),它将从表中提取最大ID并为插入添加一个数字。

我遇到的问题是由于ESRI用于插入记录的方式。每次点击保存时,在地图软件(ArcMap)中创建数据时,它都会充当表格上的插入内容。因此,如果您在一条记录后点击保存并且最大ID为27,则新记录/数据的ID将为28.再次采用这种情况,但这次您在点击保存之前创建了两个功能,这会将两个记录都插入到表中在同一时间,每条记录的ID分别为28而不是28和29。

所有这一切都说,我已经粘贴了我正在使用的代码,该代码适用于原始数据集和由其进行版本化创建的增量表,但我需要帮助搞清楚如何使用来自当前数据集,用于填充插入的每个记录的下一个记录ID,而不会在多记录插入上复制它。此代码专注于宗地边界的宗地ID,在许多情况下,我可能需要拆分宗地,这将导致两个要素需要唯一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

1 个答案:

答案 0 :(得分: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