插入多条记录时的 SDE 自动 ID
SDE Auto ID on Insert multiple records
这是我的情况。我的数据位于 SQL Server 2008 R2 版本化的 ESRI SDE 数据库中,我希望为其自动填充唯一 ID。我找到了一个脚本,它适用于单个记录插入(它也适用于多个记录),它将从 tables 中提取最大 ID 并为其添加一个数字以进行插入。
我 运行 遇到的问题是由于 ESRI 插入记录的工作方式所致。当您在地图软件 (ArcMap) 中创建数据时,每次点击保存时,它都会作为 table 上的插入。因此,如果您在一条记录后点击保存并且最大 ID 为 27,则新 record/data 的 ID 将为 28。再次考虑这种情况,但这次您在点击保存之前创建了两个特征,这会将两条记录插入table 并且每条记录的 ID 分别为 28 而不是 28 和 29。
综上所述,我已经在下面粘贴了我正在使用的代码,它适用于原始数据集和从它创建的增量 table 版本化,但我需要帮助弄清楚如何使用当前数据集中的最大 ID 为插入的每个记录填充下一个记录 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
我终于明白了。它应该是这样的。
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
这是我的情况。我的数据位于 SQL Server 2008 R2 版本化的 ESRI SDE 数据库中,我希望为其自动填充唯一 ID。我找到了一个脚本,它适用于单个记录插入(它也适用于多个记录),它将从 tables 中提取最大 ID 并为其添加一个数字以进行插入。
我 运行 遇到的问题是由于 ESRI 插入记录的工作方式所致。当您在地图软件 (ArcMap) 中创建数据时,每次点击保存时,它都会作为 table 上的插入。因此,如果您在一条记录后点击保存并且最大 ID 为 27,则新 record/data 的 ID 将为 28。再次考虑这种情况,但这次您在点击保存之前创建了两个特征,这会将两条记录插入table 并且每条记录的 ID 分别为 28 而不是 28 和 29。
综上所述,我已经在下面粘贴了我正在使用的代码,它适用于原始数据集和从它创建的增量 table 版本化,但我需要帮助弄清楚如何使用当前数据集中的最大 ID 为插入的每个记录填充下一个记录 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
我终于明白了。它应该是这样的。
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