错误:不支持表达式评估

时间:2018-06-06 06:39:25

标签: c# sql firebird

我想简单地将数据库中的列值增加1,但我总是得到${HOME}错误/

这是我使用的查询:

expression evaluation not supported

我也尝试过在select语句中没有声明N,但它仍然无效。

我也试过

UPDATE SISTEMSKA_OGRANICENJA SET TRENUTNO = ((SELECT N.TRENUTNO FROM 
SISTEMSKA_OGRANICENJA N WHERE N.KORISNIKID = @KorisnikID AND N.OGRANICENJE = 
@Ogranicenje) + 1) WHERE KORISNIKID = @KOrisnikID 
AND OGRANICENJE = @Ogranicenje

我知道问题所在,字段UPDATE SISTEMSKA_OGRANICENJA SET TRENUTNO = TRENUTNO + 1) WHERE KORISNIKID = @KOrisnikID AND OGRANICENJE = @Ogranicenje TRENUTNO的类型。如何在一次查询中将其转换为Varchar添加1然后返回int?我知道如何用两个来做,但速度会慢一些。

暂时,我已经在2个查询中完成了这个:

varchar

1 个答案:

答案 0 :(得分:1)

您需要将更新语句更改为:

UPDATE SISTEMSKA_OGRANICENJA 
    SET TRENUTNO = (cast(TRENUTNO as integer) + 1)
    WHERE KORISNIKID = @KOrisnikID AND OGRANICENJE = @Ogranicenje

IIRC正确(现在无法检查)这应该自动强制回到varchar,但是否则将其更改为

UPDATE SISTEMSKA_OGRANICENJA 
    SET TRENUTNO = cast(cast(TRENUTNO as integer) + 1 as varchar(20))
    WHERE KORISNIKID = @KOrisnikID AND OGRANICENJE = @Ogranicenje

然而正如我在评论中指出的那样,如果TRENUTNO应该是一个数值,并且它是否打算被这样操纵(这似乎是你正在做的那种情况)现在),那么最好将此列更改为数值(整数,bigint等)而不是字符串类型。这将是您问题的真正解决方案。

如果TRENUTNO包含无法转换为整数的值,那么带有强制转换的解决方案将会失败。

小小的警告:我现在无法访问Firebird,我今天晚些时候会验证我的回答。