如何更正此 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 的数据库)的主要内容,如果未能解决你的问题,请参考以下文章
如何更正 hresult error.ms sql server