3

我不确定这是否应该是一个约束,但我希望表的“用户名”列忽略执行插入或更新时设置的值,而是存储“显示用户名”列的值转换为小写。如果“DisplayUserName”被更改,“UserName”也应该被更新为“DisplayUserName”被降低。

谢谢!

4

3 回答 3

5

听起来您正在寻找计算列。就像是:

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

这样,您将永远不必设置 UserName,根据定义,它是 DisplayUserName 中的小写值。

于 2009-03-12T01:22:53.450 回答
1

执行此操作的常用方法是使用在插入和更新时触发的触发器。

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

触发器的代码应该是这样的:

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

只需将其调整为您的特定业务规则,因为我认为我没有做对 =)

于 2009-03-12T01:15:04.607 回答
1

您将需要创建一个触发器来处理更新。

于 2009-03-12T01:15:19.520 回答