Je stocke des événements de données de prix pour des instruments financiers dans une table. Comme il peut y avoir plusieurs événements pour le même horodatage, la clé primaire de ma table est constituée du symbole, de l'horodatage et d'un champ "order". Lors de l'insertion d'une ligne, le champ de commande doit être zéro s'il n'y a pas d'autres lignes avec le même horodatage et le même symbole. Sinon, il devrait être un de plus que l'ordre max pour le même horodatage et le même symbole.Insertion de lignes dans une table avec plusieurs champs dans la clé primaire, dont le dernier doit être auto-incrémenté
Une ancienne version de la base de données utilise un schéma différent. Il a un Guid unique pour chaque ligne de la table, et a ensuite le symbole et l'horodatage. Donc, il ne conserve pas l'ordre entre plusieurs ticks avec le même horodatage.
Je veux écrire un script T-SQL pour copier les données de l'ancienne base de données vers la nouvelle. Je voudrais faire quelque chose comme ceci:
INSERT INTO NewTable (Symbol, Timestamp, Order, OtherFields)
SELECT OldTable.Symbol, OldTable.TimeStamp, <???>, OldTable.OtherFields
FROM OldTable
Mais je ne sais pas comment exprimer ce que je veux pour le champ de commande, ou s'il est encore possible de le faire de cette façon.
Quelle est la meilleure façon d'effectuer cette conversion de données?
Je veux que cela fonctionne sur SQL Server 2005 ou 2008.
@Mitch Que puis-je dire? Apparemment, je pose des questions où il m'est difficile d'être satisfait de la réponse. :) –
garder une séquence distincte pour chaque symbole + date/heure n'est pas nécessaire pour préserver l'ordre, et sera difficile à faire courir vite si vous avez une lourde charge. il suffit de faire du PK une identité et d'avoir un index sur le symbole + datetime + identity. L'identité identifiera chaque rangée de manière unique et conservera l'ordre, l'index vous permettra d'accéder aux données si nécessaire. rappelez-vous ceci est juste mon analyse de 2 minutes, ainsi vous voudrez peut-être considérer votre indexation différemment. Cependant, une séquence qui se réinitialise pour chaque symbole + date/heure est inutile, il suffit d'en faire une identité. –
vous soucient vraiment si les valeurs sont xyz + 2010-02-05 10: 10: 28.043 + 0 et xyz + 2010-02-05 10: 10: 28.043 + 1 ou quelque chose comme xyz + 2010-02-05 10: 10: 28.043 + 158745 et xyz + 2010-02-05 10: 10: 28.043 + 158749, vous pouvez dire l'ordre d'insertion de toute façon –