Voici une table avec une colonne calculée dans SQL Server 2005:SQL Server: Calculés Erreur d'expression
CREATE TABLE footable AS
[identifier] nvarchar(255) NOT NULL,
[result] AS CASE
WHEN [identifier] like '%\[%]' escape '\'
THEN LEFT([identifier], CHARINDEX('[',[identifier]) - 1)
END
Voici ce que je me attends:
Cela a fonctionné il y a quelques jours, et travaille depuis plus d'un an.
Alors hier, j'ai commencé à obtenir cette erreur lors de l'insertion ou la mise à jour avec identifier
valeurs qui avaient pas [
, lorsqu'un NULL serait le résultat escompté:
Invalid length parameter passed to the left function.
Maintenant, aujourd'hui, il travaille à nouveau.
Pourquoi SQL Server tente-t-il de résoudre la fonction LEFT()
lorsque la valeur CASE
est incorrecte? Plus important encore, pourquoi ça marche un jour et pas le prochain?
Je créais également des vues indexées hier, mais je ne couvrais aucune de ces colonnes. L'une des options SET nécessaires pour l'indexation d'une vue peut-elle provoquer le lancement d'erreurs de la base de données pour une expression comme celle-ci?
Si vous obtenez les zones lors de l'insertion ou la mise à jour par opposition à la sélection, je soupçonne qu'ils doivent provenir d'ailleurs (par exemple, les déclencheurs). –
"erreurs" pas "zones"! –
Et si le premier caractère était un ['' pour un identifiant hier? Ensuite, vous demanderiez les 0 caractères de gauche. Peut-être que le modèle doit être '_% \ [%]' escape '\' – GilM