我不确定这是否应该是一个约束,但我希望表的“用户名”列忽略执行插入或更新时设置的值,而是存储“显示用户名”列的值转换为小写。如果“DisplayUserName”被更改,“UserName”也应该被更新为“DisplayUserName”被降低。
谢谢!
我不确定这是否应该是一个约束,但我希望表的“用户名”列忽略执行插入或更新时设置的值,而是存储“显示用户名”列的值转换为小写。如果“DisplayUserName”被更改,“UserName”也应该被更新为“DisplayUserName”被降低。
谢谢!
听起来您正在寻找计算列。就像是:
CREATE TABLE [dbo].[SampleTable](
[ID] [int] IDENTITY(1, 1) NOT NULL,
[DisplayUserName] [varchar](100) NOT NULL,
[UserName] AS (lower([DisplayUserName]))
) ON [PRIMARY]
这样,您将永远不必设置 UserName,根据定义,它是 DisplayUserName 中的小写值。
执行此操作的常用方法是使用在插入和更新时触发的触发器。
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)
只需将其调整为您的特定业务规则,因为我认为我没有做对 =)
您将需要创建一个触发器来处理更新。