2009-02-06 6 views
0

J'aide la mise en œuvre d'une base de données SQL Server 2008 et j'ai plusieurs colonnes que je voudrais par défaut au numéro suivant dans une séquence, mais toujours en mesure d'insérer des nombres à la main à volonté. Dans PostgreSQL, ceci est fait avec le type de données SERIAL et une séquence. Malheureusement, ces choses n'existent pas dans SQL Server. Voici ce que je sais ne fonctionnera pas. Une colonne d'identité n'autorise pas les insertions sauf si vous définissez IDENTITY_INSERT sur on. Dans ce cas, cela fonctionne comme vous le souhaitez, mais selon le MSDN, cette propriété ne peut être définie que sur une table à la fois et je voudrais le faire pour plusieurs tables.Comment obtenir quelque chose de similaire au type de données SERIAL PG dans SQL Server 2008?

  • Une fonction peut être définie comme valeur par défaut pour un champ, mais étant donné qu'une fonction ne peut pas définir de valeurs dans la base de données, il est impossible de mettre à jour le nombre une fois que la valeur actuelle est définie.
  • Une procédure stockée peut être utilisée pour incrémenter le numéro et le renvoyer, mais ils ne peuvent pas être définis comme valeur par défaut sur une colonne. Le travail autour de ce que j'ai mis en place pour l'instant est simplement de créer une procédure stockée qui renvoie la valeur que je veux et le code dans l'API LINQ afin que cela se produise automatiquement. Cela produit un code standard que je voudrais supprimer.

    Est ce que je veux même possible dans SQL Server?

  • Répondre

    0

    Non. Colonne d'identité ou rouler la vôtre sont fondamentalement vos choix.

    0

    Il y a de bonnes raisons de ne pas le faire - vous devez implémenter toutes les règles de verrouillage que SQL fait pour vous garantir une valeur unique - et il peut y avoir un coût de performance pour cela si la valeur doit retour à votre niveau de données ou d'entreprise (par exemple, vous pouvez créer un graphique d'objet en mémoire avant de l'enregistrer).

    Une alternative si vous voulez vraiment créer un graphe d'objet complet en mémoire et l'enregistrer en une fois est d'utiliser les GUID mais ceux-ci ont leurs propres inconvénients.

    +0

    Le verrouillage requis ne serait pas si important si vous aviez une chose de type "séquence" par table, et un GUID est beaucoup trop cher pour ce que je cherche à accomplir ici. – Mykroft

    Questions connexes