SQL Server:插入触发器

Dar*_*iss 0 sql t-sql sql-server triggers sql-server-2008

我的触发器问题如下.谢谢你的帮助.

CREATE TRIGGER upper_case ON osoba
AFTER INSERT AS
BEGIN
    DECLARE @imie VARCHAR(25)
    DECLARE @new_imie VARCHAR(25)
    DECLARE my_cursor CURSOR FAST_FORWARD FOR SELECT imie FROM INSERTED

    OPEN my_cursor
    FETCH NEXT FROM my_cursor INTO @imie

    WHILE @@FETCH_STATUS = 0
        BEGIN
            @new_imie = UPPER(SUBSTRING(@imie, 1, 1)) + SUBSTRING(@imie, 2,LEN(@imie))
        END
        UPDATE osoba
        SET imie = @new_imie WHERE imie = @imie
END
Run Code Online (Sandbox Code Playgroud)

错误消息:

消息102,级别15,状态1,过程upper_case,行13
'@ new_imie'附近的语法不正确.
消息102,级别15,状态1,过程upper_case,行17'END
'附近的语法不正确.

Mar*_*ith 5

不要使用光标.

您可以使用UPDATE一次性影响所有行的语句,而不是逐个处理它们.

CREATE TRIGGER upper_case
ON osoba
AFTER INSERT
AS
  BEGIN
      UPDATE O
      SET    imie = UPPER(SUBSTRING(I.imie, 1, 1)) + SUBSTRING(I.imie, 2, LEN(I.imie))
      FROM   INSERTED I
             JOIN osoba O
               ON I.imie = O.imie
  END 
Run Code Online (Sandbox Code Playgroud)