2009-01-20 7 views
1

Je souhaite créer une colonne calculée persistante dans une table afin de pouvoir l'utiliser dans le cadre d'une relation de clé étrangère avec une autre table.Comment spécifier la largeur d'une colonne varchar calculée?

Je ces tableaux:

événements (EventID UNIQUEIDENTIFIER, EventCode varchar (8)) - EventCode est une colonne discriminante

Parties (EventID uniqueidentifier) ​​

... et je veux pour ajouter une colonne EventCode à "Parties" afin que la contrainte de clé étrangère puisse inclure les deux colonnes.

J'ai essayé ceci:

ALTER TABLE Parties ADD EventCode AS 'PARTY' PERSISTED 

Mais qui ajoute la colonne comme, je ne sais pas, char (5) ou quelque chose (puisque le type de la colonne est déduit de l'expression). Donc, je ne peux pas le relier à Events.EventCode parce que les deux colonnes ont des largeurs différentes.

Existe-t-il un moyen de spécifier la largeur d'une colonne calculée, ou devrais-je le faire (ce qui semble moche mais je pense que ça va marcher)?

ALTER TABLE Parties ADD EventCode AS CAST('PARTY' AS varchar(8)) PERSISTED 

Répondre

3

Vous aurez besoin de convertir la valeur à la taille et au type de données que vous souhaitez. Si vous insérez une chaîne statique, SQL Server utilisera CHAR car c'est plus rentable que VARCHAR. Si vous vouliez le faire sans le CAST dans la définition, alors vous auriez besoin de remplir la valeur à 8 caractères 'PARTY', puis de la convertir en VARCHAR en faisant vos jointures (ce qui tuerait les performances de la base de données).

+0

Merci mrdenny. Décevant, mais je suppose que c'est seulement un coup unique quand il crée la ligne depuis qu'elle est persistante. –

Questions connexes