Requête pour obtenir l'identité suivante?

Requête pour obtenir l'identité suivante? C'est possible pour la table sans enregistrements supprimés:

SELECT TOP 1 EMPID + 1 FROM Employee ORDER BY EMPID DESC

Si il est supprimé des données, Comment vais-je obtenir l'identité suivante ? Par exemple, j'ai un tableau comme ceci:

EMPID    NAME
4001     someName
4002     someName
4003 ----------------------- this is deleted
4004     someName
4005     someName
4006     someName
4007     someName
4008     someName
4009 ----------------------- this is deleted
4010 ----------------------- this is deleted

La sortie doit être 4011

  • Seulement un commentaire mais pourquoi avez-vous besoin? Pourquoi ne pas effectuer l'insertion et les récupérer à l'aide de la technologie iden scope_identity?
  • Sera utiliser dans mon application winform pour afficher le prochain EmpID
  • Peut-être une question stupide... mais pourquoi voulez-vous afficher la prochaine EmpID?
  • C'est insensé. Si vous effectuez une requête pour obtenir ce que l'identité suivante pourrait être par le temps, vous finirez par faire une insertion, une autre personne peut avoir généré une nouvelle valeur (soit validée ou annulée), ce qui rend votre supposition tout à fait inexacte. Quel est le point de montrer l'ID de toute façon? Les valeurs d'identité doit être transparente des mères porteuses que les utilisateurs finaux n'ont pas besoin de connaître ou de se soucier. S'ils le font, puis valider l'insertion, puis montrez-leur ce qu'ils ont obtenu, au lieu de leur montrer ce qu'ils pourraient obtenir.
  • SQL Server n'a pas de "recycler" les valeurs d'identité supprimées - et c'est une BONNE chose!
  • Dans mon application un utilisateur insère un livre. Par exemple someBook sera insert avec 3 exemplaires. Table1.BookID = 1, Table1.Copie = 3, Puis dans une autre table, ces 3 livres ont leur clé primaire de sorte qu'il sera de Table2.AccessionID = 1,2,3 Table2.BookID = 1, 1, 1.
  • C'est faux à bien des niveaux, et l'on a accepté la réponse ne va pas vous faire des faveurs, quand vous avez réellement tester avec plusieurs utilisateurs. 🙁
  • Alors, quelle est la meilleure façon de le faire?
  • Effectuer l'insertion d'abord, puis de l'afficher sur votre formulaire. Pourquoi est-ce que votre utilisateur besoin de savoir ce que l'ID de la valeur qu'ils reçoivent avant que vous avez attribué à le leur? Comment est-ce aider si c'est mal?
  • Voir mon premier commentaire! Effectuer l'insertion et ENSUITE récupérer la réelle iden valeur utilisée.
  • Je pense que la requête ci-dessus est assez bon parce que l'utilisateur ne sera pas autorisé à supprimer des enregistrements, à la place d'une Colonne de quelque chose comme le Statut sera mis à jour avec la valeur Deleted
  • et si un autre utilisateur insère un enregistrement entre le moment de l'utilisateur, puis vos données devient de déformation
  • vous êtes complètement à côté de la question. Simuler deux utilisateurs de votre application par l'ouverture de deux fenêtres management studio. Dans chacun exécuter votre IDENT_CURRENT de requête de sortie et les résultats. Maintenant, insérez-la dans la table dans une fenêtre, et ensuite l'insérer dans l'autre, dans les deux cas, vérifier SCOPE_IDENTITY(). Il est 100% impossible pour eux deux pour correspondre à la IDENT_CURRENT de sortie, mais vous avez montré à la fois les utilisateurs d'identification que sur la forme. Notez que dans aucune session ne vous supprimez quelque chose.