Import from MSSQL doesn't work for views and complex tables

I try to load a schema dump for a big ERP, but it fails in some of the bigger views and tables. Unfortunately the error message doesn’t help in finding out how I could clean up the schema before importing.

Example:


CREATE VIEW [Kunde].[v360GradSicht]
AS
SELECT  tkunde.kKunde,
		tKunde.cKundenNr,
		tAdresse.cAnrede,
		tAdresse.cTitel,
		tKundenGruppe.cName AS KundenGruppe,
		tKundenKategorie.cName AS KundenKategorie,
		tAdresse.cVorname,
		tAdresse.cName,
		tAdresse.cFirma,
        tAdresse.cStrasse,
		tAdresse.cPLZ,
		tAdresse.cOrt,
		tAdresse.cLand,
		tAdresse.cTel,
		tAdresse.cMobil,
		tAdresse.cFax,
		tAdresse.cMail,
		tkunde.cGeburtstag,
		tZahlungsart.cName AS StandartZahlungsart,
        CAST(CASE WHEN tKunde.cSperre = 'Y' THEN 1 ELSE 0 END AS BIT) AS Gesperrt,
		CAST(CASE WHEN tkunde.cNewsletter = 'Y' THEN 1 ELSE 0 END AS BIT) AS Newsletter,
		CAST(dbo.tkunde.nMahnstopp AS BIT) AS Mahnstopp,
		CAST(CASE WHEN tkunde.cHerkunft = 'Amazon' THEN 1 ELSE 0 END AS BIT) AS HerkunftAmazon,
        CAST(CASE WHEN tKunde.cHerkunft = 'Ebay' THEN 1 ELSE 0 END AS BIT) AS HerkunftEbay,
		CAST(CASE WHEN tKunde.cKassenKunde = 'Y' THEN 1 ELSE 0 END AS BIT) AS KasseKunde,
        CAST(CASE WHEN tkunde.kInetKunde > 0 THEN 1 ELSE 0 END AS BIT) AS ShopKunde,
		CAST(CASE WHEN Preis.kKunde IS NOT NULL THEN 1 ELSE 0 END AS BIT) AS KundenvindividuellePreise,
        tkunde.dErstellt AS KundeSeit,
		Bestellungen.LastOrder AS LetzteBestellung,
		Bestellungen.Umsatz - ISNULL(Gutschrift.GutschriftWertBrutto, 0) AS Umsatz,
		ISNULL(Bestellungen.AvgWarenkorb, 0) AS AvgWarenkorb,
		ISNULL(Bestellungen.AnzahlBestellungen, 0) AS AnzahlBestellungen,
		ISNULL(Bestellungen.AnzahlStorno, 0) AS AnzahlStorno,
		ISNULL(Bestellungen.AnzahlOffen, 0) AS AnzahlOffen,
        ISNULL(Mahnungen.AnzahlMahnungen, 0) AS AnzahlMahnungen,
		ISNULL(Rechnungen.OffeneRechnungen, 0) AS OffeneRechnungen,
		ISNULL(dbo.tkunde.fRabatt, 0) AS RabattKunde,
		ISNULL(Retouren.Anzahl, 0) AS AnzahlRetouren,
		ISNULL(Gutschein.Menge, 0) AS Kundenguthaben,
		ISNULL(Positionssummen.MitCoupon, 0) AS MitCoupon,
		ISNULL(Positionssummen.Gewinn, 0) - ISNULL(Gutschrift.GutschriftWertNetto, 0) AS Gewinn,
		ISNULL(Bestellungen.SummeBestellungOffen, 0.0) AS SummeBestellungOffen,
		ISNULL(CAST(ISNULL(Rechnungen.SummeRechnungOffen, 0.0) AS DECIMAL(25,13)), 0.0) AS SummeRechnungOffen
FROM dbo.tkunde
JOIN dbo.tAdresse ON tAdresse.kKunde = tkunde.kKunde
					AND tAdresse.nStandard = 1
					AND tAdresse.nTyp = 1
LEFT JOIN dbo.tKundenGruppe ON dbo.tKundenGruppe.kKundenGruppe = dbo.tkunde.kKundenGruppe
LEFT JOIN dbo.tKundenKategorie ON dbo.tKundenKategorie.kKundenKategorie = dbo.tkunde.kKundenKategorie
LEFT JOIN dbo.tZahlungsart ON dbo.tZahlungsart.kZahlungsart = dbo.tkunde.kZahlungsart
LEFT JOIN (SELECT DISTINCT kKunde
            FROM dbo.tPreis
		) AS Preis ON Preis.kKunde = dbo.tkunde.kKunde
LEFT JOIN (SELECT	vAuftrag.kKunde AS kKunde,
					MAX(vAuftrag.dErstellt) AS LastOrder,
					SUM(vAuftragEckdaten.fWertBrutto) AS Umsatz,
					AVG(vAuftragEckdaten.fWertBrutto) AS AvgWarenkorb,
                    COUNT(vAuftrag.kAuftrag) AS AnzahlBestellungen,
					SUM(CASE WHEN vAuftrag.nStorno = 1 THEN 1 ELSE 0 END) AS AnzahlStorno,
					SUM(CASE WHEN vAuftrag.nKomplettAusgeliefert = 0 THEN 1 ELSE 0 END) AS AnzahlOffen,
					SUM(CASE WHEN vAuftrag.nKomplettAusgeliefert = 0 THEN vAuftragEckdaten.fWertBrutto - vAuftragEckdaten.fGutschrift ELSE 0.0 END) AS SummeBestellungOffen
            FROM Verkauf.vAuftrag
			JOIN Verkauf.vAuftragEckdaten ON vAuftragEckdaten.kAuftrag = vAuftrag.kAuftrag
			WHERE vAuftrag.nType = 1
            GROUP BY vAuftrag.kKunde
		) AS Bestellungen ON Bestellungen.kKunde = dbo.tkunde.kKunde
LEFT JOIN (SELECT
	MAX(Rechnung.tRechnung.kKunde) AS kKunde,
	SUM(CASE WHEN tRechnung.kRechnung IS NULL THEN 0 ELSE 1 END) AS OffeneRechnungen,
					SUM(tRechnungEckdaten.fVkBruttoGesamt - tRechnungEckdaten.fGutschrift) AS SummeRechnungOffen
            FROM Rechnung.tRechnung
			JOIN Rechnung.tRechnungEckdaten ON tRechnungEckdaten.kRechnung = tRechnung.kRechnung AND tRechnungEckdaten.nZahlungStatus <> 2
            GROUP BY tRechnung.kKunde
		) AS Rechnungen ON Rechnungen.kKunde = dbo.tkunde.kKunde
LEFT JOIN (SELECT vAuftrag.kKunde AS kKunde,
				SUM(((
				(CAST(vAuftragPosition.fVkNetto AS DECIMAL(25,13)) - (CAST(vAuftragPosition.fVkNetto AS DECIMAL(25,13)) * vAuftragPosition.fRabatt) / 100)
				/
				CASE
					WHEN vAuftrag.fFaktor = 0
						THEN 1
					ELSE vAuftrag.fFaktor
				END
				) - (vAuftragPosition.fEkNetto / (
				CASE
					WHEN vAuftrag.fFaktor = 0
						THEN 1
					ELSE vAuftrag.fFaktor
				END))) * vAuftragPosition.fAnzahl) AS Gewinn,
				SUM(CASE WHEN vAuftragPosition.nType = 3 THEN 1 ELSE 0 END) AS MitCoupon
			FROM Verkauf.vAuftrag
			JOIN Verkauf.vAuftragEckdaten ON vAuftragEckdaten.kAuftrag = vAuftrag.kAuftrag
			JOIN Verkauf.vAuftragPosition ON vAuftragPosition.kAuftrag = vAuftrag.kAuftrag
			WHERE vAuftrag.nType = 1 AND vAuftrag.nStorno = 0
			GROUP BY vAuftrag.kKunde
		) AS Positionssummen ON Positionssummen.kKunde = tkunde.kKunde
LEFT JOIN (SELECT tRechnung.tKunde_kKunde AS kKunde, COUNT(DISTINCT tZahlungsErinnerung.kRechnung) AS AnzahlMahnungen
			FROM dbo.tZahlungsErinnerung
			LEFT JOIN DEPRECATED.vRechnung AS tRechnung ON tRechnung.kRechnung = tZahlungsErinnerung.kRechnung
			GROUP BY tRechnung.tKunde_kKunde
		) AS Mahnungen ON Mahnungen.kKunde = dbo.tkunde.kKunde
LEFT JOIN (SELECT	kKunde,
					COUNT(kBestellung) AS Anzahl
			FROM (SELECT DISTINCT kBestellung, kKunde
					FROM dbo.tRMRetoure
					GROUP BY kKunde, kBestellung
				) AS RetourenBestellung
            GROUP BY kKunde
		) AS Retouren ON Retouren.kKunde = dbo.tkunde.kKunde
LEFT JOIN (SELECT SUM(fWert) AS Menge,
				kKunde
            FROM dbo.tGutschein
            GROUP BY kKunde
		) AS Gutschein ON Gutschein.kKunde = dbo.tkunde.kKunde
		LEFT JOIN
		(
			SELECT tgutschrift.kKunde,
				SUM(((
				(CAST(tGutschriftPos.fVkNetto AS DECIMAL(25,13)) - (CAST(tGutschriftPos.fVkNetto AS DECIMAL(25,13)) * tGutschriftPos.fRabatt) / 100)
				/
				CASE
					WHEN tgutschrift.fFaktor = 0
						THEN 1
					ELSE tgutschrift.fFaktor
				END
				) - (Verkauf.vAuftragPosition.fEkNetto  / (
                CASE
                    WHEN tgutschrift.fFaktor = 0
                        THEN 1
                    ELSE tgutschrift.fFaktor
                END
                ))) * tGutschriftPos.nAnzahl) AS GutschriftWertNetto,
				SUM(((
				(CAST(tGutschriftPos.fVKPreis AS DECIMAL(25,13)) - (CAST(tGutschriftPos.fVKPreis AS DECIMAL(25,13)) * tGutschriftPos.fRabatt) / 100)
				/
				CASE
					WHEN tgutschrift.fFaktor = 0
						THEN 1
					ELSE tgutschrift.fFaktor
				END
				)) * tGutschriftPos.nAnzahl) AS GutschriftWertBrutto
				FROM tgutschrift
				JOIN tGutschriftPos ON tGutschriftPos.tGutschrift_kGutschrift = tgutschrift.kGutschrift
                JOIN Verkauf.vAuftragPosition ON vAuftragPosition.kAuftragPosition = dbo.tGutschriftPos.kBestellPos
                WHERE tGutschrift.nStorno = 0 AND tGutschrift.nStornoTyp = 0
                GROUP BY tgutschrift.kKunde
		) AS Gutschrift ON Gutschrift.kKunde = dbo.tkunde.kKunde
GO

Hi @AK-Chris,

Thank you for letting us know,

Currently, we don’t support importing from view in SQL server. We’ll continue to improve the MSSQL import process as well as the errors displayed.

In the meantime, you could try removing all the CREATE VIEW... statements, because even without errors, they won’t have any effects on the resulting DBML after import

Best regards.