представление миграции между Mssql Server на MySql - PullRequest
0 голосов
/ 23 сентября 2018

Я перенес таблицу базы данных из mssql в mysql.И теперь я хочу перенести представление между mssql в базу данных mysql, и я пытаюсь сделать это вручную.Для mysql я использую верстак.Представление в базе данных mssql выглядит следующим образом:

    SELECT  
    u.Name, 
    u.Rights, 
    u.FirstName, 
    u.LastName, 
    u.IsDeleted, 
    activities.SiteName, 
    activities.RegionID, 
    activities.RegionName, 
    activities.ActivityID, 
    activities.DateTime, 
    activities.UserID, 
    activities.IPAddress, 
    activities.ClientID, 
    activities.SiteID, 
    activities.VariableID, 
    activities.ActivityActionID, 
    activities.Description, 
    activities.LogActionDescription, 
    activities.DeviceName, 
    activities.VariableName
FROM    Security.[User] AS u 
INNER JOIN
(SELECT a.SiteName, 
        a.RegionID, 
        a.RegionName, 
        a.ActivityID, 
        a.DateTime, 
        a.UserID, 
        a.IPAddress, 
        a.ClientID, 
        a.SiteID, 
        a.VariableID, 
        a.ActivityActionID, 
        a.Description, 
        a.LogActionDescription, 
        v.DeviceName, 
        v.VariableName
FROM  dbo.v_ReportVariables AS v 
RIGHT OUTER JOIN
    (SELECT s.SiteName, 
            s.RegionID, s.RegionName, [Log].Activity.ActivityID, 
            [Log].Activity.DateTime, [Log].Activity.UserID, [Log].Activity.IPAddress, 
            [Log].Activity.ClientID, [Log].Activity.SiteID, [Log].Activity.VariableID, 
            [Log].Activity.ActivityActionID, [Log].Activity.Description, 
            [Log].ActivityAction.Description AS LogActionDescription
        FROM  dbo.v_Sites AS s 
        RIGHT OUTER JOIN
            [Log].Activity ON s.SiteID = [Log].Activity.SiteID 
        INNER JOIN [Log].ActivityAction ON [Log].Activity.ActivityActionID = [Log].ActivityAction.ActivityActionID) AS a 
        ON v.VariableID = a.VariableID
    ) AS activities ON u.UserID = activities.UserID

, когда я переносил таблицы базы данных в mysql, имена таблиц изменились.Например, когда имя в mssql было «Security.User», имя в mysql изменилось на security_user.Я попытался вручную создать это представление из mssql в myssql, изменив имя таблицы, как показано ниже:

 SELECT  
    u.Name, 
    u.Rights, 
    u.FirstName, 
    u.LastName, 
    u.IsDeleted, 
    activities.SiteName, 
    activities.RegionID, 
    activities.RegionName, 
    activities.ActivityID, 
    activities.DateTime, 
    activities.UserID, 
    activities.IPAddress, 
    activities.ClientID, 
    activities.SiteID, 
    activities.VariableID, 
    activities.ActivityActionID, 
    activities.Description, 
    activities.LogActionDescription, 
    activities.DeviceName, 
    activities.VariableName
FROM    Security_User AS u 
INNER JOIN
(SELECT a.SiteName, 
        a.RegionID, 
        a.RegionName, 
        a.ActivityID, 
        a.DateTime, 
        a.UserID, 
        a.IPAddress, 
        a.ClientID, 
        a.SiteID, 
        a.VariableID, 
        a.ActivityActionID, 
        a.Description, 
        a.LogActionDescription, 
        v.DeviceName, 
        v.VariableName
FROM  dbo_v_ReportVariables AS v 
RIGHT OUTER JOIN
    (SELECT s.SiteName, 
            s.RegionID, s.RegionName, Log_Activity.ActivityID, 
            Log_Activity.DateTime, Log_Activity.UserID, Log_Activity.IPAddress, 
            Log_Activity.ClientID, Log_Activity.SiteID, Log_Activity.VariableID, 
            Log_Activity.ActivityActionID, Log_Activity.Description, 
            Log_ActivityAction.Description AS LogActionDescription
        FROM  dbo_v_Sites AS s 
        RIGHT OUTER JOIN
            Log_Activity ON s.SiteID = Log_Activity.SiteID 
        INNER JOIN Log_ActivityAction ON Log_Activity.ActivityActionID = Log_ActivityAction.ActivityActionID) AS a 
        ON v.VariableID = a.VariableID
    ) AS activities ON u.UserID = activities.UserID

, и я создал представление без синтаксических ошибок в mysql.Но представление кода после создания изменилось в mysql на:

SELECT 
    `u`.`Name` AS `Name`,
    `u`.`Rights` AS `Rights`,
    `u`.`FirstName` AS `FirstName`,
    `u`.`LastName` AS `LastName`,
    `u`.`IsDeleted` AS `IsDeleted`,
    `activities`.`SiteName` AS `SiteName`,
    `activities`.`RegionID` AS `RegionID`,
    `activities`.`RegionName` AS `RegionName`,
    `activities`.`ActivityID` AS `ActivityID`,
    `activities`.`DateTime` AS `DateTime`,
    `activities`.`UserID` AS `UserID`,
    `activities`.`IPAddress` AS `IPAddress`,
    `activities`.`ClientID` AS `ClientID`,
    `activities`.`SiteID` AS `SiteID`,
    `activities`.`VariableID` AS `VariableID`,
    `activities`.`ActivityActionID` AS `ActivityActionID`,
    `activities`.`Description` AS `Description`,
    `activities`.`LogActionDescription` AS `LogActionDescription`,
    `activities`.`DeviceName` AS `DeviceName`,
    `activities`.`VariableName` AS `VariableName`
FROM
    (`eye`.`security_user` `u`
    JOIN (SELECT 
        `a`.`SiteName` AS `SiteName`,
            `a`.`RegionID` AS `RegionID`,
            `a`.`RegionName` AS `RegionName`,
            `a`.`ActivityID` AS `ActivityID`,
            `a`.`DateTime` AS `DateTime`,
            `a`.`UserID` AS `UserID`,
            `a`.`IPAddress` AS `IPAddress`,
            `a`.`ClientID` AS `ClientID`,
            `a`.`SiteID` AS `SiteID`,
            `a`.`VariableID` AS `VariableID`,
            `a`.`ActivityActionID` AS `ActivityActionID`,
            `a`.`Description` AS `Description`,
            `a`.`LogActionDescription` AS `LogActionDescription`,
            `v`.`DeviceName` AS `DeviceName`,
            `v`.`VariableName` AS `VariableName`
    FROM
        (((SELECT 
        `s`.`SiteName` AS `SiteName`,
            `s`.`RegionID` AS `RegionID`,
            `s`.`RegionName` AS `RegionName`,
            `eye`.`log_activity`.`ActivityID` AS `ActivityID`,
            `eye`.`log_activity`.`DateTime` AS `DateTime`,
            `eye`.`log_activity`.`UserID` AS `UserID`,
            `eye`.`log_activity`.`IPAddress` AS `IPAddress`,
            `eye`.`log_activity`.`ClientID` AS `ClientID`,
            `eye`.`log_activity`.`SiteID` AS `SiteID`,
            `eye`.`log_activity`.`VariableID` AS `VariableID`,
            `eye`.`log_activity`.`ActivityActionID` AS `ActivityActionID`,
            `eye`.`log_activity`.`Description` AS `Description`,
            `eye`.`log_activityaction`.`Description` AS `LogActionDescription`
    FROM
        ((`eye`.`log_activity`
    LEFT JOIN `eye`.`dbo_v_sites` `s` ON ((`s`.`SiteID` = `eye`.`log_activity`.`SiteID`)))
    JOIN `eye`.`log_activityaction` ON ((`eye`.`log_activity`.`ActivityActionID` = `eye`.`log_activityaction`.`ActivityActionID`))))) `a`
    LEFT JOIN `eye`.`dbo_v_reportvariables` `v` ON ((`v`.`VariableID` = `a`.`VariableID`)))) `activities` ON ((`u`.`UserID` = `activities`.`UserID`)))

, это не то же самое, что код, который я создал, и я не знаю, имеет ли он тот же результат.Могу ли я помочь кому-нибудь с некоторыми направлениями, как перенести представления вручную?

1 Ответ

0 голосов
/ 24 сентября 2018

Не будет никакой причины в 99% случаев, когда вы не сможете просто копировать слова в слова, слово за словом, меняя имена таблиц, если это необходимо.Любая синтаксическая ошибка должна быть достаточно очевидной.

Я бы начал с этого, потому что рефакторинг, который произошел в вашем третьем примере, - это не то, что я хотел бы пройти.Все символы цитаты заставляют мои глаза слезиться.И обмен справа налево также потребует тщательного понимания.

Кстати, я бы также сказал, что в моей (дольше, чем мне хотелось бы помнить) карьере в этом деле я никогда не писал правильного соединения, так как мне кажется, что гораздо яснее идти другим путем, ноэто может быть только я.Несмотря на это, я не хотел бы оставлять это на усмотрение автоматизированного рефакторинга, который значительно затрудняет чтение, а не загорает.

Так что следуйте своей ручной версии - sql между двумя базами данных почти всегда будет работать.Я уверен, что вы можете найти ресурсы, которые детализируют различия (такие как типы данных, преобразования и тому подобное), которые могут помешать.

Ваш взгляд не имеет ни одного из них.

...