Sql server 获得';将表达式转换为数据类型smalldatetime时出现算术溢出错误;

Sql server 获得';将表达式转换为数据类型smalldatetime时出现算术溢出错误;,sql-server,vb.net,Sql Server,Vb.net,我得到了这个错误。有没有办法调试错误 代码在下面,第2064行是最后一行之前的一行, “设置rsTemp=CONNTTEMP.execute(输入查询)” SQL Server的Microsoft OLE DB提供程序错误“80040e57” 将表达式转换为数据类型smalldatetime时出现算术溢出错误 AsPPage.asp,第2064行 <% rsTemp.close set rsTemp=nothing ConnTemp.close set ConnTemp=nothing e

我得到了这个错误。有没有办法调试错误

代码在下面,第2064行是最后一行之前的一行, “设置rsTemp=CONNTTEMP.execute(输入查询)”

SQL Server的Microsoft OLE DB提供程序错误“80040e57”

将表达式转换为数据类型smalldatetime时出现算术溢出错误

AsPPage.asp,第2064行

<%
rsTemp.close
set rsTemp=nothing
ConnTemp.close
set ConnTemp=nothing
end sub

sub query2table(InputQuery, InputDSN, CompletedSection)

dim ConnTemp, rsTemp

set ConnTemp=server.createobject("adodb.connection")
ConnTemp.ConnectionTimeout = 0 ' Do not allow timeouts.
ConnTemp.open InputDSN

if CompletedSection = "Y" and instr(1, InputQuery, "Acknowledged_By") > 0 then
    InputQuery = replace(InputQuery, "Acknowledged_By", "CompletedBy")
    InputQuery = replace(InputQuery, "viewOrders.AcknowledgedBy AS CompletedBy", "viewOrders.CompletedBy")
end if

if CompletedSection = "Y" and instr(1, InputQuery, "AcknowledgeDate") > 0 then
    InputQuery = replace(InputQuery, "Date_Acknowledged", "CompletionDate")
    InputQuery = replace(InputQuery, ", viewOrders.AcknowledgeDate AS Date_Acknowledged", "")
    InputQuery = replace(InputQuery, ", viewOrders.AcknowledgeDate AS CompletionDate", "")
    InputQuery = replace(InputQuery, ", viewOrders.CompletionDate, viewOrders.Ship_Status", ", viewOrders.CompletionDate, viewOrders.CompletedBy, viewOrders.Ship_Status")
end if

if instr(1, ucase(trim(InputQuery)), "DATE()") > 0 and Session("Database") = "SQLServer" then
    InputQuery = replace(InputQuery, "Date()", Session("CurrentDateSyntax"))
end if

if rsAppName("AllowFormOrders") = false then
    InputQuery = replace(InputQuery, "GROUP BY", "AND (viewOrders.FormOrder = 0) GROUP BY")
end if

if rsAppName("AllowPRIncentiveOrders") = false then
    InputQuery = replace(InputQuery, "GROUP BY", "AND (viewOrders.PRIncentive = 0) GROUP BY")
end if

if rsAppName("AllowSpecimenOrders") = false then
    InputQuery = replace(InputQuery, "GROUP BY", "AND (viewOrders.SpecimenOrder = 0) GROUP BY")
end if

if rsAppName("ShowRushColumnInApproversAndFulfillmentPages") = false then
    InputQuery = replace(InputQuery, ", viewOrders.RushMaterialsASAP", "")
end if

if rsAppName("AllowRepositorySupplyBlinding") = false then
    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Waiting.LineItemCount, viewBlindItemCounts_Waiting.BlindItemCount FROM", _
        ", -2 AS LineItemCount, 0 AS BlindItemCount FROM")
    InputQuery = replace(InputQuery, "viewBlindItemCounts_Waiting.LineItemCount, viewBlindItemCounts_Waiting.BlindItemCount, ", "")
    InputQuery = replace(InputQuery, "LEFT JOIN viewBlindItemCounts_Waiting ON viewOrders.OrderNumber = viewBlindItemCounts_Waiting.OrderNumber", "")
    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Waiting.LineItemCount, viewBlindItemCounts_Waiting.BlindItemCount HAVING", " HAVING")

    InputQuery = replace(InputQuery, ", viewBlindItemCounts_NonCompleted.LineItemCount, viewBlindItemCounts_NonCompleted.BlindItemCount FROM", _
        ", -2 AS LineItemCount, 0 AS BlindItemCount FROM")
    InputQuery = replace(InputQuery, "viewBlindItemCounts_NonCompleted.LineItemCount, viewBlindItemCounts_NonCompleted.BlindItemCount, ", "")
    InputQuery = replace(InputQuery, "LEFT JOIN viewBlindItemCounts_NonCompleted ON viewOrders.OrderNumber = viewBlindItemCounts_NonCompleted.OrderNumber", "")
    InputQuery = replace(InputQuery, ", viewBlindItemCounts_NonCompleted.LineItemCount, viewBlindItemCounts_NonCompleted.BlindItemCount HAVING", " HAVING")

    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Cancelled.LineItemCount, viewBlindItemCounts_Cancelled.BlindItemCount FROM", _
        ", -2 AS LineItemCount, 0 AS BlindItemCount FROM")
    InputQuery = replace(InputQuery, "viewBlindItemCounts_Cancelled.LineItemCount, viewBlindItemCounts_Cancelled.BlindItemCount, ", "")
    InputQuery = replace(InputQuery, "LEFT JOIN viewBlindItemCounts_Cancelled ON viewOrders.OrderNumber = viewBlindItemCounts_Cancelled.OrderNumber", "")
    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Cancelled.LineItemCount, viewBlindItemCounts_Cancelled.BlindItemCount HAVING", " HAVING")

    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Completed.LineItemCount, viewBlindItemCounts_Completed.BlindItemCount FROM", _
        ", -2 AS LineItemCount, 0 AS BlindItemCount FROM")
    InputQuery = replace(InputQuery, "viewBlindItemCounts_Completed.LineItemCount, viewBlindItemCounts_Completed.BlindItemCount, ", "")
    InputQuery = replace(InputQuery, "LEFT JOIN viewBlindItemCounts_Completed ON viewOrders.OrderNumber = viewBlindItemCounts_Completed.OrderNumber", "")
    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Completed.LineItemCount, viewBlindItemCounts_Completed.BlindItemCount HAVING", " HAVING")
    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Completed.BlindItemCount ORDER BY ", " ORDER BY ")
    InputQuery = replace(InputQuery, ", viewBlindItemCounts_Completed.LineItemCount ORDER BY ", " ORDER BY ")
end if

set rsTemp=ConnTemp.execute(InputQuery)
NumberOfFields=rsTemp.fields.count -1%>

调试此类问题的最简单方法是在执行SQL的行上放置断点。然后使用immediate/watch/locals/autos窗口,可以在执行SQL语句之前获取其内容。将其放入MSSMS甚至记事本中的新查询窗口中。通常,您只需查看最终的SQL即可了解问题所在。也就是说,在你约会的时候不要引用引号之类的话

如果仍然没有发现问题,请在MSSMS中运行它。它有时会给你更多关于这个问题的信息。如果没有,请尝试将SQL分解为更小的部分,直到找到确切的问题

如果你现在还不知道它是什么,谷歌一下,你可能不是第一个有这个问题的人


希望这能回答您的问题,“是否有办法调试错误?”

问题已解决。通过在经典ASP代码中操作数据库中smalldatetime数据类型的数据,解决了此问题。数据库中的一个表将datetime作为数据库的数据类型,而不是smalldatetime。更改修复了错误,我可以完全加载页面。

执行InputQuery之前,您可以打印InputQuery的值,并将其发布到您的问题中吗?感谢Steve的及时回复。我使用的是经典ASP,我可以添加断点,但在MS Visual Studio 2008上,“调试”按钮呈灰色。有什么想法吗?我已经做了一段时间了,但是你可以在Msgbox()中显示SQL。这有助于完成第一步,但如果需要将其复制到SQL Server,则会带来麻烦。为此,您可能需要想办法将其发送到另一个页面(重定向)或在输入(文本框)或其他内容中显示。通常,如果您能看到SQL,您就会看到问题。实际上,您可以在Visual Studio中调试ASP。这是一个疯狂复杂的过程,但它确实有效。我看看能不能帮你找到步骤。问题解决了。问题在于在经典ASP代码中操作来自数据库的smalldatetime数据类型中的数据。数据库中的一个表将datetime作为数据库的数据类型,而不是smalldatetime。