2009-03-12 5 views
3

Je ne sais pas si cela devrait être une contrainte ou non, mais je veux que la colonne "UserName" d'une table ignore la valeur qui est définie quand une insertion ou une mise à jour est exécutée et à la place, stocke la valeur de la colonne "DisplayUserName" convertie en minuscules. Et si "DisplayUserName" est changé, "UserName" devrait être mis à jour ainsi que "DisplayUserName" abaissé.Contrainte minuscule - SQL Server

Merci!

Répondre

1

La méthode la plus courante consiste à utiliser un déclencheur qui se déclenche lors de l'insertion et de la mise à jour.

http://msdn.microsoft.com/en-us/magazine/cc164047.aspx

Le code pour le déclencheur doit être quelque chose comme ceci:

CREATE TRIGGER updateDisplayName_trigger ON Users 
FOR INSERT, UPDATE 
AS 
IF UPDATE(UserName) 
UPDATE Users SET DisplayUserName = Lower(UserName) 

Il suffit de l'adapter à votre règle spécifique d'affaires, parce que je pense que je ne me trompe pas =)

1

Vous devrez créer un déclencheur pour gérer la mise à jour.

5

Il semble que vous cherchiez une colonne calculée. Quelque chose comme:

CREATE TABLE [dbo].[SampleTable](
    [ID] [int] IDENTITY(1, 1) NOT NULL, 
    [DisplayUserName] [varchar](100) NOT NULL, 
    [UserName] AS (lower([DisplayUserName])) 
) ON [PRIMARY] 

De cette façon, vous auriez jamais à régler le UserName, il est par définition la valeur minuscule de DisplayUserName.