1

我需要有关在 SQL Server 中编写要在 Siebel 中使用的触发器的帮助:

  • 系统字段 ROW_ID 必须是唯一的(键)
  • 当字段 INSERT_CD 和 CAMP_WAVE_ID 为空时,必须生成 ROW_ID(见下文)。
  • 如果不是,请保持 ROW_ID 不变。
  • ROW_ID 是 varchar(15) 的关键字段。

以下语句生成完美的键/行 ID:

select substring(replace (CAST (newid() as varchar(36)),'-',''),1,15)

我需要有关编写 SQL Server 2005 触发器以生成此密钥的帮助。

4

2 回答 2

0

我强烈建议不要修改 ROW_ID。使用不同的列,也许添加您自己的扩展列,但不要修改(或尝试自己设置)ROW_ID。将其保留为 Siebel 设置的值。

您不得修改任何系统列(键入“系统”,在工具中检查,在表 > 列中)

于 2009-09-11T03:59:16.190 回答
0

这是我们做到这一点的一种方式。我们设置 OBIEE 以生成对当前负载唯一的 ROW_ID,因此 WHERE 子句可以获取要更新的记录。

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'S_CAMP_CON_Direct_Load_ROW_ID' AND type = 'TR')
   DROP TRIGGER S_CAMP_CON_Direct_Load_ROW_ID
GO
CREATE TRIGGER S_CAMP_CON_Direct_Load_ROW_ID
ON S_CAMP_CON FOR INSERT
AS

UPDATE S_CAMP_CON
    SET ROW_ID = (select substring(replace (CAST (newid() as varchar(36)),'-',''),1,15))
   WHERE S_CAMP_CON.ROW_ID IN
   (SELECT ROW_ID FROM inserted WHERE INSERT_CD = 'Direct Load')

但是我们担心ROW_ID 的唯一性,因为我们使用的是子字符串。

于 2009-09-11T10:14:50.180 回答