0

下面的触发器有问题。谢谢你的帮助。

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

错误信息:

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

4

3 回答 3

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 
于 2013-10-29T22:10:40.430 回答
1

You should use SET when you assign @new_imie (msdn):

SET @new_imie = UPPER(SUBSTRING(@imie, 1, 1)) + SUBSTRING(@imie, 2,LEN(@imie));
于 2013-10-29T22:05:29.703 回答
0

Your assignment to @new_imie requires the SET keyword in front of it...

   SET @new_imie = UPPER(SUBSTRING(@imie, 1, 1)) + SUBSTRING(@imie, 2,LEN(@imie))
于 2013-10-29T22:05:20.843 回答