2009-09-01 5 views
1

je besoin d'aide sur l'écriture d'un déclencheur dans SQL Server à utiliser dans Siebel:Comment puis-je mettre à jour un champ de clé sur insert pour SQL Server (tableau Siebel S_CAMP_CON)

  • Le champ système ROW_ID doit être unique (touche)
  • Lorsque le champ INSERT_CD et CAMP_WAVE_ID est nul, ROW_ID doit être généré (voir ci-dessous).
  • Sinon, laissez ROW_ID tel quel.
  • ROW_ID est un champ clé de varchar (15).

L'instruction suivante génère l'ID clé parfaite/rangée:

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

je besoin d'aide sur l'écriture d'un déclencheur SQL Server 2005 pour générer cette clé.

+0

Voici un soupçon d'Oracle: create trigger test_trigger avant insertion sur S_CAMP_CON pour chaque ligne commencent sélectionnez test_seq.nextval dans: new.ROW_ID du double; fin; –

Répondre

0

est une manière Ici, nous l'avons fait. Nous configurons OBIEE pour générer un ROW_ID unique pour le chargement en cours et donc pourquoi la clause WHERE peut obtenir la mise à jour de l'enregistrement.

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

Mais nous sommes préoccupés par le caractère unique de ROW_ID puisque nous utilisons une sous-chaîne.

0

Je suggère fortement de ne pas modifier ROW_ID. Utilisez une colonne différente, ajoutez peut-être votre propre colonne d'extension, mais ne modifiez pas (ou n'essayez pas de vous définir) ROW_ID. Laissez-le à la valeur que Siebel y met.

Vous ne devez pas modifier l'une des colonnes du système (type « Système », Outils, dans le tableau> Colonnes)

+0

L'utilisation de l'insertion directe pour le chargement de campagnes ignore la couche de données Siebel, car OBIEE insère directement les enregistrements dans S_CAMP_CON. –

Questions connexes