access语句转换为Sql

access语句转换为Sql,sql,sql-server,tsql,ms-access,Sql,Sql Server,Tsql,Ms Access,如何将此转换为T-Sql IIf([ESSValue]<>0,Int([ESSValue]*100),"") IIf([ESSValue]0,Int([ESSValue]*100),“”) 值为0时的情况 然后强制转换(ESSValue*100为整数) 否则无效 以字段名结尾 对于case表达式,如果不满足任何条件,则默认值为NULL,因此您实际上不需要ELSE条件我认为以下内容非常符合您的要求: select coalesce(cast(EssValue * 100 as in

如何将此转换为T-Sql

IIf([ESSValue]<>0,Int([ESSValue]*100),"")
IIf([ESSValue]0,Int([ESSValue]*100),“”)
值为0时的情况
然后强制转换(ESSValue*100为整数)
否则无效
以字段名结尾

对于case表达式,如果不满足任何条件,则默认值为
NULL
,因此您实际上不需要
ELSE
条件

我认为以下内容非常符合您的要求:

select coalesce(cast(EssValue * 100 as int), 0)
这是我的想法。与零的比较并不重要,因为0乘以任何值都将为零。
iif()
返回一个整数(我认为),因为“then”参数是一个整数;空字符串被转换为零

关于MS Access的最后几句话,我不是100%确定,但这就是
iif()
在SQL Server中的工作方式

我要补充一点。虽然我不赞成将
iif()
用于条件表达式(因为
case
是标准且更强大),但SQL Server确实支持它。所以你可以写:

IIf([ESSValue]<>0, cast([ESSValue]*100 as int), '')
IIf([ESSValue]0,强制转换([ESSValue]*100为整数),“”)

注意:正如我前面提到的,如果sql中的/else逻辑通常是在
case when
关键字时进行的,那么
'
将转换为
0

。这是TSQL。若对整数进行运算,则不能返回字符串值。请改为尝试null。什么类型是
[ESSValue]
??为什么要将其转换为整数??为什么默认值是“”。。。在Sql中,不能为同一字段[ESSValue]浮点类型返回两种不同的类型原始语句从不返回
NULL
IIf([ESSValue]<>0, cast([ESSValue]*100 as int), '')