Как обновить поле ключа при вставке для SQL Server (таблица Siebel S_CAMP_CON) - PullRequest
1 голос
/ 01 сентября 2009

Мне нужна помощь в написании триггера в SQL Server для использования в Siebel:

  • Системное поле ROW_ID должно быть уникальным (ключ)
  • Когда поля INSERT_CD и CAMP_WAVE_ID равны нулю, тогда должен быть сгенерирован ROW_ID (см. Ниже).
  • Если нет, оставьте ROW_ID как есть.
  • ROW_ID является ключевым полем varchar (15).

Следующий оператор генерирует идеальный идентификатор ключа / строки:

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

Мне нужна помощь в написании триггера SQL Server 2005 для генерации этого ключа.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2009

Вот один из способов, которым мы это сделали. Мы настроили 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 , поскольку мы используем подстроку.

0 голосов
/ 11 сентября 2009

Я бы настоятельно рекомендовал не изменять ROW_ID. Используйте другой столбец, возможно, добавьте свой собственный столбец расширения, но не изменяйте (или не пытайтесь установить себя) ROW_ID. Оставьте это в значении, которое Зибель вкладывает туда.

Вы не должны изменять ни один из системных столбцов (введите «Система», отметьте «Инструменты» в «Таблица»> «Столбцы»)

...