mysql - MS-SQL 存储过程到 MySQL

标签 mysql sql-server string delimiter

任何人都可以帮我将以下 MS-SQL sp 写入 MySQL sp,

使用这个:

CREATE PROCEDURE sp_InputWork 
    @_DelimitedString nvarchar(MAX) 
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @_DataRow nvarchar(MAX)
    DECLARE @_DescriptionOfWorkDone nvarchar(MAX)
    DECLARE @_TemporaryStorage nvarchar(MAX)
    DECLARE @_QTY int
    DECLARE @_Total int
    DECLARE @_CurrentField int

    WHILE CHARINDEX(';', @_DelimitedString) > 0
    BEGIN
        SET @_DataRow = CAST(SUBSTRING(@_DelimitedString, 0, CHARINDEX(';', @_DelimitedString)) AS nvarchar(MAX))
        SET @_CurrentField = 1
        WHILE CHARINDEX(',', @_DataRow) > 0
            BEGIN
            SET @_TemporaryStorage = CAST(SUBSTRING(@_DataRow, 0, CHARINDEX(',', @_DataRow)) AS nvarchar(MAX))
            IF @_CurrentField = 1
                SET @_QTY = CAST(@_TemporaryStorage AS int)
                    IF @_CurrentField = 2
            SET @_DescriptionOfWorkDone = @_TemporaryStorage
                    IF @_CurrentField = 3
                    SET @_Total = CAST(@_TemporaryStorage AS int)           
            SET @_DataRow = SUBSTRING(@_DataRow, CHARINDEX(',', @_DataRow) + 1, LEN(@_DataRow))
            SET @_CurrentField = @_CurrentField + 1
        END
        INSERT INTO tblWorkDone (QTY, DescriptionOfWorkDone, Total) VALUES (@_QTY, @_DescriptionOfWorkDone, @_Total)
        SET @_DelimitedString = SUBSTRING(@_DelimitedString, CHARINDEX(';', @_DelimitedString) + 1, LEN(@_DelimitedString))
        END 
END 

最佳答案

我已将SP更改为Mysql

BEGIN
DECLARE _DataRow VARCHAR(21000);
 DECLARE _DescriptionOfWorkDone VARCHAR(21000);
DECLARE _TemporaryStorage VARCHAR(21000) ;
DECLARE _QTY int;
DECLARE _Total int;
DECLARE _CurrentField int;

WHILE INSTR(_DelimitedString, ';') >0 DO

    SET _DataRow = CAST(SUBSTRING(_DelimitedString, 1, INSTR(_DelimitedString,';' )) AS CHAR);
    SET _CurrentField = 1;
    WHILE INSTR(_DataRow,',' ) > 0 DO         
        SET _TemporaryStorage = CAST(SUBSTRING(_DataRow, 1, INSTR(_DataRow,',' )-1) AS CHAR);
        IF _CurrentField = 1 then
            SET _QTY = CAST(_TemporaryStorage AS UNSIGNED);
                end if;
                      IF _CurrentField = 2 then
        SET _DescriptionOfWorkDone = _TemporaryStorage;
                end if;
                      IF _CurrentField = 3 then
                SET _Total = CAST(_TemporaryStorage AS UNSIGNED)    ;   
                     end if;    

        SET _DataRow = SUBSTRING(_DataRow, INSTR( _DataRow,',') + 1, LENGTH(_DataRow));
        SET _CurrentField = _CurrentField + 1;
         END while;

    INSERT INTO tblWorkDone (QTY, DescriptionOfWorkDone, Total) VALUES (_QTY, _DescriptionOfWorkDone, _Total);
    SET _DelimitedString = SUBSTRING(_DelimitedString, INSTR(_DelimitedString,';' ) + 1, LENGTH(_DelimitedString));

   END WHILE;END

插入数据

CALL `sp_InputWork`('1,TEST,100,;2,TEST1,200,;3,TEST3,300,;')

成功循环插入Mysql表

关于mysql - MS-SQL 存储过程到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062279/

相关文章:

sql-server - 如何在 SSMS 中查看 ntext 或 nvarchar(max) 中的所有文本?

java - android 将 json 传递给 HashMap 到 alertdialog 中显示的 llistview

php - 从远程 mysql 数据库检索图像到 android

PHP 和 PDO - 从 MySQL 迁移 - 不显示结果或错误

python - 如何使用一个 SQLAlchemy 模型保存到两个表

sql-server - 增加数据流任务中的变量

sql-server - tablix ‘Tablix1’ 的 TablixCornerCell 数量不正确。

java - 如何改变 JTextArea 中只有一个字符串的大小?

用于获取字符串的 Java Date 对象构造函数已弃用

Python:用括号比较和替换列表[i]