You are on page 1of 2

Questions:

Hello,

While I am migrating code from MSSQL server (SQL Server Management Studio) to MYSQL
(MYSQL work bench version13), I am getting 3 errors in my code.
1. Issue 616: MySQL doesn't support the OUTPUT clause in the statements INSERT, UPDATE,
and DELETE. A manual conversion is required.
2. Issue 659: The scope table-variables and temporary tables is different. You must apply
manual conversion, if you are using recursion
3. Issue 753: MySQL doesn't support the ROUND function with the [function] argument

Please check my errors and provide me correct code solution.

Thanks,

Code:
UPDATE AgreementLongTerm
SET
VolumeToDate = ROUND(oa.Volume, 2, 1),
IsProcessed = CASE WHEN VolumeToDate != oa.Volume THEN 0 ELSE IsProcessed
END
FROM AgreementLongTerm a
JOIN AgreementLongTermType t ON t.OID = a.AgreementLongTermType
JOIN Customer c ON c.OID = a.Customer
OUTER APPLY
(
SELECT
s.DSDLECode,
s.DSDYear,
SUM(ISNULL(s.DSDVolume_Sticks, 0) / f.PMISticks_per_carton *
f.PMIVolume_Coefficient ) Volume
FROM DSDDailySales s
JOIN DSDFactoryItem f ON s.DSDFACode = f.PMIFA_Code AND f.PMICounted_For_Volume =
1
WHERE s.DSDYear = YEAR(a.ContractStart) AND s.DSDLECode = (SELECT CASE WHEN
CHARINDEX('/', c.Code) > 0 THEN SUBSTRING(c.Code, 0, CHARINDEX('/', c.Code)) ELSE c.Code
END)
GROUP BY s.DSDLECode, s.DSDYear
) AS oa
WHERE t.Name = 'Volume Buckets'
AND YEAR(a.ContractStart) >= YEAR(GETDATE()) - 1;

DECLARE @AgreementIDs TABLE (ID INT, Changed BIT);

UPDATE AgreementLongTermVolume
SET VolumeRealized = ROUND(oa.Volume, 2, 1)
OUTPUT INSERTED.AgreementLongTerm,
CASE WHEN ISNULL(INSERTED.VolumeRealized, 0) != ISNULL(DELETED.VolumeRealized, 0)
THEN 1 ELSE 0 END
INTO @AgreementIDs
FROM AgreementLongTermVolume v
JOIN agreementlongterm a ON v.AgreementLongTerm = a.OID
JOIN AgreementLongTermType t ON t.OID = a.AgreementLongTermType
JOIN Customer c ON c.OID = a.Customer
JOIN TimePeriod tp ON v.TimePeriod = tp.OID
JOIN TimePeriodType tpt ON tp.TimePeriodType = tpt.OID
OUTER APPLY
(
SELECT
s.DSDLECode,
s.DSDYear,
SUM(ISNULL(s.DSDVolume_Sticks, 0) / f.PMISticks_per_carton *
f.PMIVolume_Coefficient ) Volume
FROM DSDDailySales s
JOIN DSDFactoryItem f ON s.DSDFACode = f.PMIFA_Code AND f.PMICounted_For_Volume =
1
WHERE s.DSDYear = YEAR(a.ContractStart) AND s.DSDLECode = (SELECT CASE WHEN
CHARINDEX('/', c.Code) > 0 THEN SUBSTRING(c.Code, 0, CHARINDEX('/', c.Code)) ELSE c.Code
END)
AND tp.PeriodOrdinal = CASE
WHEN s.DSDMonth = 1 OR s.DSDMonth = 2 THEN 1
WHEN s.DSDMonth = 3 OR s.DSDMonth = 4 THEN 2
WHEN s.DSDMonth = 5 OR s.DSDMonth = 6 THEN 3
WHEN s.DSDMonth = 7 OR s.DSDMonth = 8 THEN 4
WHEN s.DSDMonth = 9 OR s.DSDMonth = 10 THEN 5
WHEN s.DSDMonth = 11 OR s.DSDMonth = 12 THEN 6
END
GROUP BY
s.DSDLECode,
s.DSDYear,
CASE
WHEN s.DSDMonth = 1 OR s.DSDMonth = 2 THEN 1
WHEN s.DSDMonth = 3 OR s.DSDMonth = 4 THEN 2
WHEN s.DSDMonth = 5 OR s.DSDMonth = 6 THEN 3
WHEN s.DSDMonth = 7 OR s.DSDMonth = 8 THEN 4
WHEN s.DSDMonth = 9 OR s.DSDMonth = 10 THEN 5
WHEN s.DSDMonth = 11 OR s.DSDMonth = 12 THEN 6
END
) AS oa
WHERE tpt.Name = 'Bimonthly'
AND YEAR(a.ContractStart) >= YEAR(GETDATE()) - 1;

UPDATE AgreementLongTerm
SET IsProcessed = 0
WHERE OID IN (SELECT ID FROM @AgreementIDs WHERE Changed = 1);

END

You might also like