【发布时间】:2009-03-12 01:10:31
【问题描述】:
我不确定这是否应该是一个约束,但我希望表的“用户名”列忽略执行插入或更新时设置的值,而是存储“ DisplayUserName”列转换为小写。如果“DisplayUserName”发生变化,“UserName”也应该更新为“DisplayUserName”降低。
谢谢!
【问题讨论】:
我不确定这是否应该是一个约束,但我希望表的“用户名”列忽略执行插入或更新时设置的值,而是存储“ 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]
这样,您将永远不必设置用户名,根据定义,它是 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)
只需根据您的具体业务规则进行调整,因为我认为我没有做对 =)
【讨论】:
您需要创建一个触发器来处理更新。
【讨论】: