如何更正此 SQL 脚本中的错误(使用 Azure Datawarehouse 的数据库)

Posted

技术标签:

【中文标题】如何更正此 SQL 脚本中的错误(使用 Azure Datawarehouse 的数据库)【英文标题】:How to Correct the error in this SQL script (Database Using Azure Datawarehouse) 【发布时间】:2017-07-25 11:54:20 【问题描述】:

我在尝试运行下面的脚本时遇到了困难。错误信息:

Order by 子句在视图和内联函数中无效

insert into cc.s
(
    id, 
    encid, 
    a_name, 
    a_des, 
    a_type, 
    a_value, 
    d_create
)
select 
    id, 
    encid,
    'days_charge',
    'Days 43',
    'int',
    (
        select 
            datediff(day,t_dis,a.ts_it) 
        from 
            cc.enoun 
        where 
            encid <> a.encid 
            and id=a.pe_id 
            and a_source='tEst' 
            and a.ts_admit > t_dis 
        order by 
            tdischarge desc limit 1
    ) as attr_value,
    getdate()
from 
    cc.s a
GO

【问题讨论】:

你使用什么数据库/什么工具?尝试重新提出问题,以便不熟悉上下文的人能够理解 我正在使用 Azure Datawarehouse,并且还使用 SSMS 工具来编辑查询 【参考方案1】:

在您的脚本中,您尝试使用 SELECT 语句来获取 a_value。您的问题是此 select 语句是您的内联函数。由于内联函数不能有 ORDER BY 子句,您只需将其删除即可。

insert into cc.s(id, encid, a_name, a_des, a_type, a_value, d_create)
select id, encid,'days_charge','Days 43','int',
(select datediff(day,t_dis,a.ts_it) from cc.enoun where encid<>a.encid and id=a.pe_id and a_source='tEst' and a.ts_admit>t_dis)        
as attr_value,
getdate()
from cc.s a
GO

还要确保您的内联语句只返回 1 个值。由于您尝试使用 ORDER BY 子句,这可能意味着它返回多个结果。

【讨论】:

内联函数能否返回多个值 不,它不能。假设您有一个这样的简单查询: INSERT INTO table_1 VALUES(value1, value2, (SELECT a FROM table_2)) 如果您的内联函数 (SELECT a FROM table_2) 返回多个值,您会怎么做?您显然不能将它们全部添加到数据库中的一个条目中。如果您愿意,可以在这里阅读更多内容:link

以上是关于如何更正此 SQL 脚本中的错误(使用 Azure Datawarehouse 的数据库)的主要内容,如果未能解决你的问题,请参考以下文章

如何更正我的旋转平台脚本并修复 Unity 中的错误纹理?

如何更正 hresult error.ms sql server

如何更正此 SQL 查询?

如何解决 Azure DevOps 中的“堆栈跟踪错误”

如何更正此错误:“'Adminsite' 对象没有属性 'root'”

使用 Azure 时如何解决此错误“AddressAccessDeniedException”?