firebird 请求中的错误:无效令牌更改

问题描述 投票:0回答:1

第5行的错误,我知道这是一个语法错误,但我不明白如何修复它

CREATE OR ALTER trigger ustroystva row position bi for ustroystva
active before insert position 0
as
if(exists (select * from ustroystva where table_name="ustroystva" and column_name="rowposition")) then
alter table ustrovstva drop rowposition;
end 
else then
alter table dbo.ustroystva add rowposition int null
end
sql firebird
1个回答
0
投票

您显示的语法在 Firebird 中甚至无效,它似乎是 Firebird 和 Microsoft SQL Server 的某种混合体。如果在 Firebird 上执行,则会导致与您在问题中提到的错误不同的错误。错误将是:

Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 36
-row

那是因为它不遵循 Firebird 的

CREATE OR ALTER TRIGGER
语法。

但是,看看您的意图,问题是您正在尝试执行 DDL (

ALTER TABLE
),并且您无法在触发器(或任何其他 PSQL 代码)中执行 DDL。有解决方法,使用
EXECUTE STATEMENT
,但不建议这样做。

此外,您尝试执行的 DDL 对我来说根本没有意义。对于

ustroystva
中的每次插入,您可以删除列
rowposition
或添加它。你为什么要这么做?

© www.soinside.com 2019 - 2024. All rights reserved.