none
SSIS Fehler bei Anzeige einer Tabelle/View aus einer MySQL Datenbank RRS feed

  • Frage

  • Hallo,

    ich habe eine SQL Server 2008 R2 Datenbank und möchte via SSIS Patete en Daten aus einer MySQL Datenbank Version 5.0.51a auslesen.

    Dazu habe ich mir die sowohl die 3.5.1 als auch die 5.2 Treiber installiert.
    Ich kann Verbindungen anlegen und in einem SSIS Paket einen ADO Net Connection Manager anlegen.
    Wenn ich damit eine ADO Net Source anlege, werden mir dit Tabbellen und Views der MySQL Datenbank angezeigt.

    Beim Preview bekomme ich dann aber die folgende Fehlermeldung:
    "Error as Tata Flow Task [Ado Net Source [76]]: Teh component "Ado NET Source (76) was unable to retrieve column information for the SQL command. The following error occurred: ERRER [42000]
    [MySQL][ODBC 5.2(a) Driveer][mysqld-5.0.51a]You have an error in your SQL syntax; check the manual that correspondends to your MySQL server version for the right syntax near "'x_query'" at line 1

    Additional information:
    Pipeline component fas returned HRESULT error code 0xC02020FF from a method call.
    (Microsoft.SqlServer.DTSPipelineWrap)"

    Hat jemand eine Idee wo das problem liegt und was ich tun kann?
    Mein DB-Server läuft mit Windows 2003 Server.
    Ich habe mittels ACCESS 2010 eine Verbindung zu der DB aufgemacht und kann die Tabellen und Views der MySQL DB sehen, verknüpfen und auslesen.

    ES scheint also eine Problem vom SQL Server zu sein.

    Gruß

    cheapy


    Mittwoch, 16. Januar 2019 10:03

Alle Antworten

  • Hi,

    poste bitte das exakte unv vollständige SQL Statement, dass hier abgesetzt werden soll.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 16. Januar 2019 10:18
    Moderator
  • Hallo Stefan,

    ich bekomme diesen Fehler, wenn ich den Preview Button im ADO.Net Source Editor betätige.
    Wie komme ich da an das SQL-Statement?

    Gruß

    cheapy

    Mittwoch, 16. Januar 2019 10:43
  • Hallo,

    In SSIS verwendet man besser ODBC oder OleDB statt der .NET Provider, das ist performanter.

    Enthält die Tabelle Feldnamen, die zu den reservierten Namen zählen? https://stackoverflow.com/questions/21509026/error-in-your-sql-syntax-check-the-manual-that-corresponds-to-your-mysql-server?rq=1

    In dem Fall versuche es mit eine Abfrage statt direkt auf die Tabelle zu gehen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 16. Januar 2019 11:34
  • Hallo Olaf,

    wenn ich mit einer Data Flow Task arbeite, bekomme ich nur ADO und OLE DB angezeigt.
    Wenn ich im Connection Manager eine OLE DB Connection üfr MYSQL anlegen will, bekomme ich den nötigen Treiber nicht angezeigt.

    Ich habe dann noch eine ODBC Connection angelegt und es mit einer Query versucht:

    SELECT COUNT (*) FROM a_config;

    Dürfte ja nicht zu kompliziert sein aber auch das funktioniert nicht:

    [Execute SQL Task] Error: Executing the query "SELECT COUNT (*) FROM a_config;" failed with the following error: "[MySQL][ODBC 5.2(a) Driver][mysqld-5.0.51a]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM a_config' at line 1". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
    

    In dieser Tabelle sind keine reservierten Worte als Feldnamen. Nichtmal Leerzeichen in Feldnamen. Anstelle der Leerzeichen sind es Unterstriche. Das dürfte ja auch kein Porblem sein, oder?

    Mittwoch, 16. Januar 2019 12:40
  • [Execute SQL Task] Error: Executing the query "SELECT COUNT (*) FROM a_config;"

    Du musst dem errechnetem Feld einen Alias Namen geben, sonst kann SSIS mit dem Abfrageergebnis nichts anfangen und das Feld nicht ansprechend =>

    SELECT COUNT(*) AS Anzahl FROM a_config


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Mittwoch, 16. Januar 2019 14:14
  • Hat leider auch nicht geholfen:

    [Execute SQL Task] Error: Executing the query "SELECT COUNT (*) AS Anzahl FROM a_config;" failed with the following error: "[MySQL][ODBC 5.2(a) Driver][mysqld-5.0.51a]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS Anzahl FROM a_config' at line 1". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
    

    Mittwoch, 16. Januar 2019 14:17
  • Lass mal das AS fürs Alias weg; Oracle z.B. mag das manchmal auch nicht

    SELECT COUNT(*) Anzahl FROM a_config


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 16. Januar 2019 14:43
  • Ggf. gibt es ähnliche Probleme wie hier:

    https://www.sqlservercentral.com/Forums/390472/Unable-to-retrieve-Column-information-when-using-Ole-Db-Provider-for-sybase

    Lösungen:
    "For simple queries I've found that setting the AlwaysUseDefaulCodePage Custom Property of the OLE DB Source control to True overcomes this. "

    "SET FMTONLY OFF
    SET NOCOUNT ON"

    Mittwoch, 16. Januar 2019 16:09
  • SET FMTONLY OFF


    Das gibt es in Sybase und MS SQL Server, was auf Sybase basiert; aber nicht in MySQL, worum es hier geht.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 17. Januar 2019 06:35
  • Also für OLE DB hab ich anscheinend keine Treiber.
    Ich habe eine ODBC Connection angelegt und da finde ich diesen Parameter leider nicht.
    Donnerstag, 17. Januar 2019 07:27
  • Welchen Parameter meinst Du?

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 17. Januar 2019 08:04
  • Hat sich ja durch Deine Antwort schon geklärt.

    Es ging um FMTONLY

    Abe rnoch einmal grundsätzlich, der ich kann die Connection herstellen und sehe Tabellen und Abfragen in de MySQL DB aber sobald ich mir die  Tabelleninhalte anzeigen will (Preview) kommt der genannte Fehler.

    Dienstag, 22. Januar 2019 09:04
  • Ich kenne das auch von anderen Datenbanken, dass Native-SQL nicht immer funktioniert.

    Die Alternative ist OPENQUERY:
    https://docs.microsoft.com/de-de/sql/t-sql/functions/openquery-transact-sql?view=sql-server-2017

    select * from
    OPENQUERY(<Verbindungsserver>, 'Select * from MyTable')

    Hier bekommt der SQL-Server dann fertige Resultsets und fragt nicht nach Microsoft-Tabellen (Systemtabellen,-Views) auf dem Quellserver, die da sowieso nicht existieren.

    Vor allem ist man in dem SQL-String nicht an die SQL-Server-Syntax gebunden, sondern an die originäre Syntax des Quellservers.

    Dienstag, 22. Januar 2019 17:16