首页 > 解决方案 > 在 SQL Server 中为名字和姓氏的第一个字母创建触发器

问题描述

我想写一个触发器,它会在名字和姓氏中从小写变为大写。在我的表 klient 中,imie = name 和 nazwisko = surname。如何在 SQL Server 中做到这一点?

CREATE TABLE [dbo].[klient]
(
    [id_klient] [int] IDENTITY(1,1) NOT NULL,
    [id_silownia] [int] NOT NULL,
    [imie] [varchar](50) NOT NULL,
    [nazwisko] [varchar](50) NOT NULL,
    [telefon] [varchar](50) NULL,
)

标签: sqlsql-server

解决方案


你需要这样的东西:

-- create the trigger, on table "klient", after insert
CREATE TRIGGER trg_uppercase
ON dbo.klient
AFTER INSERT 
AS 
BEGIN
    -- update the table dbo.Klient
    UPDATE k
    -- set "imie" to be first letter in UPPER(), rest as is
    SET imie = UPPER(SUBSTRING(i.imie, 1, 1)) + SUBSTRING(i.imie, 2, 999),
        nazwisko = UPPER(SUBSTRING(i.nazwisko, 1, 1)) + SUBSTRING(i.nazwisko, 2, 999)
    FROM dbo.klient k
    -- join with "pseudo-table" Inserted to update only what was freshly inserted
    INNER JOIN Inserted i ON k.id_klient = i.id_klient;
END

这仍然有一些“粗糙的边缘”需要解决 - 例如,如果您的名字超过 999 个字符怎么办?它将如何处理NULL插入的值?

但这应该是一个不错的起点,可以了解如何编写触发器以及可以用它们做什么。


推荐阅读