存储过程inmsqltomysql

e0bqpujr  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(351)

我在mssql中有一个存储过程,我想在我的sql中写它,请给我任何帮助或建议。我不能在mysql中使用xml函数。
存储过程:

ALTER PROCEDURE uspGetProductDetailsCSV (
            @sku NVARCHAR(MAX)
        )
        AS
        BEGIN
            -

            SELECT T.C.value('.', 'NVARCHAR(100)') AS [SKU]
            INTO #tblPersons
            FROM (SELECT CAST ('<Name>' + REPLACE     (@sku, ',', '</Name><Name>') 
            + '</Name>' AS XML) AS [Products]) AS A
            CROSS APPLY Products.nodes('/Name') as T(C)

            SELECT *
            FROM ProductInformation Pr
            WHERE EXISTS (SELECT Name FROM #tblPersons tmp WHERE tmp.SKU  
                           = case when len(tmp.SKU) = 11 then Product_No+Colour_Code+Size_Code
                                  when len(tmp.SKU) = 8 then Product_No+Colour_Code
                                  when len(tmp.sku) = 6 then Product_No end)

            DROP TABLE #tblPersons
        END

编辑:我无法编写存储过程的xml部分,因为我在mysql中粘贴了相同的代码,它不会创建存储过程
错误:>无法转换为xml<

i2byvkas

i2byvkas1#

我不相信xml在mysql中是有效的类型。试着把它当作一个varchar。
所以,只需删除强制转换…我还认为您必须使用concat而不是+并将列周围的[]改为ticks。
所以不是:

FROM (SELECT CAST ('<Name>' + REPLACE     (@sku, ',', '</Name><Name>') 
+ '</Name>' AS XML) AS [Products]) AS A

尝试:

FROM (SELECT CONCAT('<Name>' , REPLACE(@sku, ',', '</Name><Name>'), 
'</Name>') AS `Products`) AS A

相关问题