Je suis en train de changer toutes les valeurs NULL dans une colonne INT à une valeur incrémentiel en utilisant une instruction comme ceci:Mise à jour avec fonction de la valeur semble seulement d'évaluer la fonction une fois
UPDATE [TableName] SET [ColumnName] = dbo.FunctionName() WHERE [ColumnName] IS NULL
où la fonction ressemble ceci:
CREATE FUNCTION FunctionName() RETURNS INT AS
BEGIN
RETURN (select MAX(ColumnName) + 1 from TableName)
END
mais le résultat est que toutes les valeurs qui étaient NULL sont maintenant réglés à la même valeur (par exemple supérieure à 1 au maximum avant la déclaration a été appelé).
Est-ce le comportement attendu? Si oui, comment pourrais-je obtenir le résultat que je cherche?
Je voudrais éviter d'utiliser une colonne d'auto-incrément comme tout ce que je veux c'est l'unicité, l'incrémentation est juste un moyen d'y arriver.
Vous obtiendrez le résultat que vous êtes après à l'aide d'une colonne autoincrement. Votre raison de ne pas vouloir en utiliser une s'applique autant à votre hack qu'à l'auto-incrémentation réelle. –
@Anon: les valeurs de cette colonne sont des identifiants uniques définis en dehors de notre système, qui ne s'auto-incrémentent définitivement pas. Je veux seulement le comportement incrémentiel pour les inconnus existants. – Eltariel