Je dois préparer un script qui sélectionne des données à partir de quelques tables et insère de nouvelles lignes dans la table dans laquelle une sorte de relation plusieurs-à-plusieurs est stockée. Donc, fondamentalement, j'ai deux tables avec le champ uniqueidentifier
comme clé primaire et une autre table qui stocke deux clés étrangères de ces tables et quelques données supplémentaires. La clé primaire de cette table est également la uniqueidentifier
.Génération GUID déterministe dans T-SQL
INSERT ResultTable ([primaryKey],[foreignA], [foreignB])
SELECT newid(), /* <- Can't have it! */
@foreignKeyA,
fb.[primaryKey]
FROM foreignTableB as fb
Le problème est que je ne peux pas utiliser newid()
pour générer GUIDs pour mes données générées. L'une des exigences est que le script produise des résultats identiques (clés primaires incluses) lorsqu'il est exécuté sur des tables identiques. Je dois donc créer un script qui va insérer de nouvelles lignes avec la valeur uniqueidentifier
générée en fonction de deux autres valeurs uniqueidentifier
. Maintenant, je ne connais pas de fonctions qui fournissent le mappage d'un GUID à un autre. Probablement il n'y en a pas. Mais j'espère toujours entendre quelques propositions et conseils.
aussi:
- On peut supposer que toute paire de clés étrangères est unique dans la table
- Je ne peux pas changer le type de champs de clé primaire dans l'une des tables mentionnées
- Il est principalement SQL Server 2005/2008, mais certains peuvent exécuter SQL Server 2000
Merci d'avance.
sons comme ce serait la même que la prise entier # 1 et nombre entier # 2, et en les mélangeant d'une manière ou d'une autre de sorte que l'entier # 3 peut être utilisé comme clé primaire. Je ne suis pas au courant d'un moyen de le faire avec une certitude de 100% de deux paires d'entiers - ou GUID - ne produisant pas le même nombre "entier" de sortie. (Les algorithmes de hachage peuvent vous rapprocher, si vous pouvez en trouver un qui génère des valeurs GUID) –
@Philip Kelley: Je suis sûr que je peux faire quelque chose comme ça en convertissant les deux GUID en chaînes et en les manipulant avec des caractères (réorganisation) puis convertir la chaîne résultante en 'uniqueidentifier'. Je finirais probablement par faire quelque chose comme ça (même si c'est incroyablement sale et probablement une mauvaise idée), mais j'ai décidé que je ne devais pas – Dyppl