oracle 将PLSql转换为T-SQL [已关闭]

f8rj6qna  于 2023-04-29  发布在  Oracle
关注(0)|答案(2)|浏览(168)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

6天前关闭。
Improve this question
这个查询是在PL-SQL中构建的,我需要将其转换为Transact SQL。
我不明白(From)下面的(Select)。
有人可以帮助解决这个问题吗?

(SELECT arp.asset_type,
        fl1.zenid,
        fl1.tplnr,
        fl1.pltxt,
        fl1.sttxu,
        fl1.eqart,
        fl1.zpovolt
 FROM   asy_sap_fl fl1,
        (SELECT asset_type,
                object_type
         FROM   asy_report_params
         WHERE  asset_group = 'SF') arp
xghobddn

xghobddn1#

在T-SQL中,可以使用派生表或CTE实现相同的结果。

SELECT arp.asset_type,
       fl1.zenid,
       fl1.tplnr,
       fl1.pltxt,
       fl1.sttxu,
       fl1.eqart,
       fl1.zpovolt
FROM   asy_sap_fl AS fl1
JOIN   (SELECT asset_type,
               object_type
        FROM   asy_report_params
        WHERE  asset_group = 'SF') AS arp
ON     fl1.object_type = arp.object_type;

或者,您可以使用CTE:

WITH arp AS (
    SELECT asset_type,
           object_type
    FROM   asy_report_params
    WHERE  asset_group = 'SF'
)
SELECT arp.asset_type,
       fl1.zenid,
       fl1.tplnr,
       fl1.pltxt,
       fl1.sttxu,
       fl1.eqart,
       fl1.zpovolt
FROM   asy_sap_fl AS fl1
JOIN   arp
ON     fl1.object_type = arp.object_type;
rkkpypqq

rkkpypqq2#

SQL Server理解逗号连接,因此您不需要做任何事情。
但是,如果你想使用ANSI标准SQL,那么用ANSI标准的CROSS JOIN(在Oracle和SQL Server的SQL方言中都有效)替换旧的Oracle逗号连接:

SELECT arp.asset_type,
       fl1.zenid,
       fl1.tplnr,
       fl1.pltxt,
       fl1.sttxu,
       fl1.eqart,
       fl1.zpovolt
FROM   asy_sap_fl fl1
       CROSS JOIN (
         SELECT asset_type,
                object_type
         FROM   asy_report_params
         WHERE  asset_group = 'SF'
       ) arp

可以简化为:

SELECT arp.asset_type,
       fl1.zenid,
       fl1.tplnr,
       fl1.pltxt,
       fl1.sttxu,
       fl1.eqart,
       fl1.zpovolt
FROM   asy_sap_fl fl1
       CROSS JOIN asy_report_params arp
WHERE  arp.asset_group = 'SF'

Oracle FiddleSQL Server Fiddle

  • 注意:你的代码只是SQL(Oracle的SQL方言),而不是PL/SQL(Oracle的过程SQL语言)。您只需要将其转换为SQL(SQL Server的方言),而不是T-SQL(SQL Server的事务SQL语言)*

相关问题