【发布时间】:2013-11-09 07:16:17
【问题描述】:
下面的触发器有问题。感谢您的帮助。
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,过程大写,第 13 行
“@new_imie”附近的语法不正确。
消息 102,级别 15,状态 1,过程 upper_case,第 17 行
'END' 附近的语法不正确。
【问题讨论】:
-
在 trigger 中使用 cursor 是您在 SQL Server 中可以做的最糟糕的事情。您应该不惜一切代价避免这种情况!触发器应该非常精简、非常高效,并且运行时间绝对最短.....
-
你关闭并释放你的光标了吗?
-
它应该做什么?它似乎没有做任何事情。
-
@RBarryYoung - 看起来它将每个更新的
imie的第一个字母大写。 -
@marc_s。在任何 dbms 中都不是一个聪明的主意...
标签: sql sql-server sql-server-2008 tsql triggers