【问题标题】:SQL Server 2008: How to update a field based on another field in the same tableSQL Server 2008:如何根据同一个表中的另一个字段更新一个字段
【发布时间】:2016-08-19 14:06:07
【问题描述】:

我有一个表,其中包含员工名字和姓氏的字段。还有一个用户名字段。每当更新名字和姓氏字段时,如何使用户名自动填充?

我想要这种格式的用户名字段:'CompanyX\FirstName.LastName'

我研究过触发器,但我认为表上的触发器不能自我更新。任何帮助,将不胜感激。谢谢!

我使用的是 SQL Server 2008。

【问题讨论】:

  • 是的,触发器可以做到。但是当用户名已经存在时应该发生什么?
  • 请展示一些示例数据和预期输出
  • 如果你有 R2,你可以使用计算列。
  • 我有 R2。我从未使用过计算列。我该如何利用它?谢谢。
  • Google 'SQL Server Computed Column' for starters...

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

这是一个计算列的示例。我测试了它,它运行良好。

CREATE TABLE [dbo].[Table_1](
    [Company] [varchar](50) NULL,
    [FirstName] [varchar](50) NULL,
    [LastName] [varchar](50) NULL,
    [UserName]  AS (((([Company]+'\')+[FirstName])+'.')+[LastName]) PERSISTED
) ON [PRIMARY]

GO

【讨论】:

  • Alter Table Table_1 ADD [UserName] AS (((([Company]+'\')+[FirstName])+'.')+[LastName]) PERSISTED GO
【解决方案2】:

你可以像这样在桌子上做一个触发器。

/****** Object:  Trigger [dbo].[trg_AuditEmployees]    Script Date: 08/04/2016 10:24:04 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TRIGGER [dbo].[trg_AuditEmployees] 
ON [dbo].[employees] 
FOR INSERT, UPDATE
AS 
BEGIN

   update dbo.employees 
   set username = company + 'x\' + lastname + '.' + firstname
   where id = select id from inserted

END

【讨论】:

  • 请注意:最好的方法是将 inserted 与表和 UPDATE 列连接。
  • 是的,你的权利,我编辑了查询。我会覆盖所有用户名。我从审计表插入中提取了示例,但没有更改以考虑更新
  • 这很有效,直到你找到两个同名的人。但这是 OP 需要解决的一个逻辑问题。这里的代码很好。
  • 下面的计算列示例应该产生相同的结果
【解决方案3】:

创建计算列用户名作为所有这些属性的连接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多