使用条件 IF 时 ASP 经典 SQL 查询中的语法错误

问题描述

我正在尝试使用 IF 和 THEN 对 ASP 经典 sql 查询中的不同元素进行排序,并尝试了许多不同的方法来使其工作......“问题孩子”是这样的:

Statssql = "SELECT COUNT(v.col) as num_not_null,COUNT(v.col) * 1.0 / COUNT(*) * 100 as percent_not_null,COUNT(*) as toltalColsNeedsFilled FROM EFP_EmploymentUser t CROSS APPLY (VALUES (t.ITAdvicedFirst),(t.ITAdvicedSecond),(t.ITDepartmentDone),(t.CFOAdvicedFirst),(t.CFOInfoProvided),(t.CFOAdvicedSecond),(t.CFodone),(t.EconomyAdviced),(t.EconomyDone)," & IF objFlowNotDone("Academy") = "yes" THEN Response.Write("(t.AcademyAdviced),(t.AcademyDone),") END IF IF objFlowNotDone("Publicator") = "yes" THEN Response.Write("(t.PublicatorAdviced),(t.PublicatorDone),") END IF & "(t.PortraitAdviced),(t.PortraitDone)) v(col) WHERE ID = '19';"

我得到的错误

Microsoft VBScript compilation error '800a03ea'

Syntax error

/flow.asp,line 271

enter image description here

谁能帮我找到正确的方向来解决这个问题?

最好的问候

斯蒂格 :-)

解决方法

除非您确实希望将 Response.Write 语句的内容显示在您的输出中,否则您不应该使用 Response.Write,并且您确实需要为条件语句另起一行。这就是您似乎正在尝试做的事情。我假设您的 SQL 是正确的,这里唯一的问题是您的 VBScript。

StatsSQL = "SELECT COUNT(v.col) as num_not_null,COUNT(v.col) * 1.0 / COUNT(*) * 100 as percent_not_null,COUNT(*) as toltalColsNeedsFilled FROM EFP_EmploymentUser t CROSS APPLY (VALUES (t.ITAdvicedFirst),(t.ITAdvicedSecond),(t.ITDepartmentDone),(t.CFOAdvicedFirst),(t.CFOInfoProvided),(t.CFOAdvicedSecond),(t.CFODone),(t.EconomyAdviced),(t.EconomyDone)"

If objFlowNotDone("Academy") = "yes" THEN 
  StatsSQL = StatsSQL & ",(t.AcademyAdviced),(t.AcademyDone)"
End If

If objFlowNotDone("Publicator") = "yes" THEN
  StatsSQL = StatsSQL & ",(t.PublicatorAdviced),(t.PublicatorDone)"
End If

StatsSQL = StatsSQL & ",(t.PortraitAdviced),(t.PortraitDone)) v(col) WHERE ID = '19';"