Views translation

Translate SQL views between source and destination dialects automatically.

Provided as is. Views translation is available in the product but is not a supported troubleshooting surface - review the generated SQL before relying on it in production.

DBConvert can translate views automatically between source and target engines. The feature parses SQL statements in the source database and generates the closest equivalent for the target dialect.

Use it to carry over compatible views without rewriting every definition manually. Always review the result before applying to production.

Customization stage with views selected

Pick queries or views to translate at the customization stage. Selected objects are processed automatically.

Views in the customization tree

Supported view types

  • SELECT-type queries / views
  • Queries with standard functions (excluding statistical with NZ prefix in MS Access)
  • SelectQuery and unionQuery in MS Access (no input parameters)
  • Views with UNION, sub-queries, CAST, CONVERT, EXIST for MySQL and MS SQL

Supported directions

Two-way translation:

One-way translation (queries to views, from Access):

Example translations

Representative examples of the translation output. Source SQL on the left, generated target SQL on the right.

MS SQL Server ↔ MySQL

Source (MS SQL)

SELECT F_T_1.ID, A_1.Dsc,
(SELECT ELat FROM dbo.A AS A_2 WHERE (ELat = 'Row')) AS Expr1
FROM dbo.F_T AS F_T_1
RIGHT OUTER JOIN dbo.A AS A_1 ON F_T_1.ID =
A_1.ID AND F_T_1.Tipo = A_1.Dsc
UNION
SELECT F_T_1.ID, A_1.Dsc, '#' FROM dbo.F_T
WHERE (F_T_1.Data > CONVERT (DATETIME, '2007-02-14 00:00:00'))

Target (MySQL)

SELECT 'F_T_1'.'ID' AS 'ID', 'A_1'.'Dsc' AS Dsc,
(SELECT 'A_2'.'ELat' AS 'ELat' FROM 'a' 'A_2'
WHERE ('A_2'.ELat = 'Row')) AS Expr1
FROM
('a' 'A_1' LEFT JOIN 'f_t' 'F_T_1' ON ((('F_T_1'.'ID' = 'A_1'.'ID')
AND ('F_T_1'.'Tipo' = 'A_1'.'Dsc'))))
UNION
SELECT 'F_T_1'.'ID' AS 'ID', 'A_1'.'Dsc' AS 'Dsc', '#' FROM 'f_t-1'
WHERE ('F_T_1'.'Data' > CAST ('2007-02-14 00:00:00' AS datetime))

MS SQL Server ↔ Oracle

Source (MS SQL)

SELECT TOP (100) PERCENT dbo.dossiers.external_authorization,
dbo.dossiers.timestamp, dossiers_1.id
FROM dbo.dossiers
INNER JOIN
dbo.GiornalePorto ON dbo.dossiers.id_nave = dbo.GiornalePorto.ID
INNER JOIN
dbo.dossiers AS dossiers_1
ON dbo.GiornalePorto.ID = dossiers_1.id
WHERE (dbo.GiornalePorto.ID >= RAND(1))
ORDER BY dbo.GiornalePorto.DataOraConcordata

Target (Oracle)

SELECT "dossiers" . "external_authorization",
"dossiers" . "timestamp", "dossiers_1" . "id"
FROM "dossiers"
INNER JOIN
"GiornalePorto" ON "dossiers" . "id_nave" = "GiornalePorto" . "ID"
INNER JOIN
"dossiers" "dossiers_1" ON "GiornalePorto" . "ID" = "dossiers_1" . "id"
WHERE "GiornalePorto" . "ID" >= dbms_random.value(0, 1)
ORDER BY "GiornalePorto" . "DataOraConcordata"

MS Access ↔ MS SQL Server

Source (Access)

SELECT tblCategory.idCategory, tblPlants.ItemKey, "Product Name: " & tblCategory.name
FROM tblPlants
INNER JOIN tblCategory ON (tblPlants.PatentInfo = tblCategory.charCategoryName) AND (tblPlants.IDNumber = tblCategory.idCategory)
WHERE ((("idCategory") < "IDNumber"))
ORDER BY tblCategory.idCategory;

Target (MS SQL)

SELECT TOP 100 tblCategory.idCategory, tblPlants.ItemKey, "Product Name: " + tblCategory.name
FROM tblPlants
INNER JOIN tblCategory
ON (tblPlants.PatentInfo = tblCategory.charCategoryName) AND (tblPlants.IDNumber = tblCategory.idCategory)
WHERE ((("idCategory") < "IDNumber"))
ORDER BY tblCategory.idCategory;

MS Access ↔ MySQL

Source (Access)

SELECT tblCategory.idCategory, tblPlants.ItemKey, "Product Name: " & tblCategory.name
FROM tblPlants
INNER JOIN tblCategory ON (tblPlants.PatentInfo = tblCategory.charCategoryName) AND (tblPlants.IDNumber = tblCategory.idCategory)
WHERE ((("idCategory") < "IDNumber"))
ORDER BY tblCategory.idCategory;

Target (MySQL)

SELECT tblCategory.idCategory, tblPlants.ItemKey, CONCAT("Product Name: ", tblCategory.name)
FROM tblPlants
INNER JOIN tblCategory ON (tblPlants.PatentInfo = tblCategory.charCategoryName) AND (tblPlants.IDNumber = tblCategory.idCategory)
WHERE ((("idCategory") < "IDNumber"))
ORDER BY tblCategory.idCategory;

MS Access ↔ PostgreSQL

Source (Access)

SELECT tblCategory.idCategory, tblPlants.ItemKey, "Product Name: " & tblCategory.name
FROM tblPlants
INNER JOIN tblCategory ON (tblPlants.PatentInfo = tblCategory.charCategoryName) AND (tblPlants.IDNumber = tblCategory.idCategory)
WHERE ((("idCategory") < "IDNumber"))
ORDER BY tblCategory.idCategory;

Target (PostgreSQL)

SELECT tblCategory.idCategory, tblPlants.ItemKey, "Product Name: " || tblCategory.name
FROM tblPlants
INNER JOIN tblCategory ON (tblPlants.PatentInfo = tblCategory.charCategoryName) AND (tblPlants.IDNumber = tblCategory.idCategory)
WHERE ((("idCategory") < "IDNumber"))
ORDER BY tblCategory.idCategory;