Je possède ce tableau structuré comme suit:Comment insérer unique ID composite pour Table hiérarchique (SQL Server)
PK ParentPK ID
1 Null A
2 1 B
3 2 C
4 1 D
5 4 E
Pour le tableau ci-dessus, je l'ai déjà une fonction qui peut générer les résultats suivants:
PK FullID
3 ABC
5 ADE
Cette fonction prend les lignes qui n'ont pas d'enfants et génère de manière récursive FullID pour chaque ligne jusqu'à leurs parents. Mon application s'attend à ce que les utilisateurs entrent une chaîne de FullID, tels que "BEF", "ABD", et appuyez sur le bouton Enregistrer, puis le devoir de l'application de l'analyser en interne à une structure hiérarchique appropriée (qui se compose de plusieurs lignes) et les insérer dans la table.
La question est, comment l'application peut garantir l'unicité de FullID? Je dois pouvoir rejeter le FullID en double entré par les utilisateurs.
Je comprends que je peux vérifier la FullID d'abord en utilisant ma fonction, si elle est existe pas, je peux effectuer les inserts. Mais si ces étapes sont effectuées dans une opération non-atomique, un FullID en double peut être entré dans un trafic important.
Dois-je envelopper dans une procédure stockée? utilisant le bloc Begin/Commit Transaction? ou y a-t-il une meilleure façon de le faire? Merci beaucoup.
Salut, UniqueKey dans quel domaine? FullID n'est pas un champ persistant dans une table, il est généré par une fonction. – danjunior1807
quel champ de table souhaitez-vous insérer le FullID? ce champ de table !!! – anishMarokey
Je n'insère pas le FullID dans une table. Le champ FullID est généré à la volée par une fonction comme celle-ci: Sélectionnez a.PK, dbo.GetFullID (a.PK) comme FULLID From TableData a Le résultat de la fonction ci-dessus N'EST PAS INSÉRÉ dans aucune table . Maintenant comment puis-je garantir l'unicité du FullID même s'il n'est inséré dans aucune table? – danjunior1807