如何更新 SQL Server 插入时的关键字段(Siebel 表 S_CAMP_CON)

发布于 2024-08-03 18:23:33 字数 382 浏览 7 评论 0原文

我需要帮助在 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 触发器来生成此键的帮助。

I need help on writing a trigger in SQL Server to be used in Siebel:

  • The system field ROW_ID has to be unique (key)
  • When the field INSERT_CD and CAMP_WAVE_ID is null then ROW_ID must be generated (see below).
  • If not, leave ROW_ID as is.
  • ROW_ID is a key field of varchar(15).

The following statement generates the perfect key/row id:

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

I need help on writing a SQL Server 2005 trigger to generate this key.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

软糯酥胸 2024-08-10 18:23:33

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

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

I would strongly suggest not to modify ROW_ID. Use a different column, maybe add your own extension column, but don't modify (or try to set yourself) ROW_ID. Leave it at the value that Siebel puts in there.

You must not modify any of the system columns (Type "System", check in Tools, in Table > Columns)

薄荷港 2024-08-10 18:23:33

这是我们做到的一种方法。我们设置 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 的唯一性,因为我们使用的是子字符串。

Here is one way we did it. We setup OBIEE to generate a ROW_ID that is unique for the current load and hence why the WHERE clause can get the record to be updated.

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')

But we are concerned by the uniqueness of ROW_ID since we are using a substring.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文