问题描述
在 Azure 数据仓库中创建存储过程时,我在“Cursor”和“FOR XML”上遇到了一些错误。所以想知道 Azure 数据仓库是否支持它们。如果不是,那么有哪些选择。
此处附上带有错误信息图片的示例代码。
解决方法
作为 per the documentation,Azure Synapse 专用 SQL 池(以前称为 Azure SQL 数据仓库)不支持 FOR XML
或游标。对于游标,要么将它们转换为使用受支持的 WHILE
循环,要么重构代码以使用基于集合的方法。另一种选择是使用外部的东西,比如 Azure 数据工厂或 Synapse Pipelines,并使用 For Each 循环。另一种选择是使用附近的 Azure SQL DB 进行一些预处理。您应该知道 Azure Synapse Analytics 的 MPP 体系结构不适合这种基于行的处理,您应该记住它是一个大数据平台,用于处理大量数据、数百万、数十亿行和基于集合的数据方法应该是首选。
如果您只是使用 FOR XML
来执行那个低俗的字符串连接技巧,那么您应该使用 STRING_AGG
来代替 Synapse 中完全支持的。有关最近的示例,请参阅 this answer。如果您实际上是在生成 XML,那么您将需要找到替代方法,例如附近的 Azure SQL DB。