2017-03-06 1 views
0

J'ai une table sans clé primaire. C'est hors de mon contrôle et je ne peux pas le changer.Déclencheur de mise à jour SQL Server sans clé primaire

Je dois ajouter un déclencheur qui met à jour une colonne lors d'une mise à jour. Y a-t-il un moyen sans clé primaire?

Si besoin de faire:

update myTable 
set someField = someValue 
where myTable.pkID = inserted.pdID 

Cependant, je n'ai pas une clé primaire, donc je ne sais pas comment faire la clause where.

+3

Y a-t-il une colonne ou une combinaison de colonnes unique? –

+0

Il peut y avoir un moyen selon la façon dont les mises à jour sont effectuées. Pensez-vous qu'une clause WHERE soit utilisée dans les mises à jour? Y a-t-il une limite à la colonne (s) qui pourrait être utilisée dans la clause WHERE? –

+0

Des tables temporaires sont créées. Peut-être que cela peut faire ce dont vous avez besoin. https://www.mssqltips.com/sqlservertip/2342/understanding-sql-server-inserted-and-deleted-tables-for-dml-triggers/ –

Répondre

0

Vous ne devez pas avoir une clé primaire formelle en soi, mais il faut une combinaison de valeurs pour identifier l'enregistrement (s) affected-- même si cela est chaque colonne de la table:

UPDATE myTable 
SET someField = someValue 
FROM myTable INNER JOIN inserted ON 
    myTable.[col1] = inserted.[col1] 
    AND myTable.[col2] = inserted.[col2] 
    AND myTable.[col3] = inserted.[col3] 
    --etc 

Si vous n'avez pas une combinaison de valeurs unique, je crains que vous n'ayez pas de chance avec cette approche.