【问题标题】:Different sql results between "Azure Mobile Services" and "Azure App Service"“Azure 移动服务”和“Azure 应用服务”之间的 sql 结果不同
【发布时间】:2016-11-29 22:13:19
【问题描述】:

在 Azure 移动服务(旧服务)和 Azure 应用服务(新服务)之间运行相同的 SQL 语句时,我得到了两个不同的结果

SQL 语句为:

SELECT ROW_NUMBER() OVER(ORDER BY score_tot DESC) AS row, score_tot FROM Player

当我使用 request.service.mssql.query() 函数将它作为旧的 Azure 移动服务运行时,我得到的 json 结果如下所示:

[ { 行:1,score_tot:45674 },

{ 行:2,score_tot:21234 }]

但是当我使用新的 Azure App Service 运行相同的 SQL 语句时 request.azureMobile.data.execute(SQL) 函数 我明白了:

[ { row: '1', score_tot: 45674 },

{ 行:'2',score_tot:21234 }]

应用服务将行列作为字符串/文本返回,而不是像在移动服务中那样作为数字返回。

为什么这两个结果之间存在差异,我该怎么做才能将行列作为应用服务中的数字? 应用服务不应该返回与旧服务相同的 SQL 语句相同的结果吗?

/T

【问题讨论】:

    标签: javascript sql json database azure-mobile-services


    【解决方案1】:

    根据我的经验,适用于 node.js 的 Azure 移动应用 SDK 使用 node-mssql npm 包作为 SQL Server 驱动程序。以下是我的测试截图,似乎node-mssqlROW_NUMBER() 函数返回 varchar 值而不是 int。

    作为一种解决方法,您可以尝试使用以下 SQL:

    SELECT CONVERT(INT, ROW_NUMBER() OVER(ORDER BY score_tot DESC)) AS row, score_tot FROM Player
    

    【讨论】:

    • 好的,感谢您的快速答复。我认为这两个服务之间不一致有点奇怪。如果您针对此新服务进行升级并期望以相同的方式运行,则可能会出现一些奇怪的行为。在我的情况下,我对返回的整数行值进行了一些计算,当我更改为这个新服务时,它开始进行字符串连接。
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多