WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

database - MS SQL Server

 

MasterQ
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.02.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2022, 14:49     Titel: database - MS SQL Server
  Antworten mit Zitat      
Hallo,

ich möchte Daten von einer Datenbank zur nächsten mit MatLab transferieren. Dabei habe ich Probleme beim Schreiben auf einen MS SQL-Server. Speziell sind nur Datenfelder des Typs (n)varchar(x) betroffen.

Es werden Strings von einem PostgreSQL gelesen. Der längste ist mehr als 130.000 Zeichen lang. Als Zieltyp auf dem SQL Server muss daher varchar bzw. nvarchar mit dem Größenparameter 'max' verwendet werden.

Laut https://de.mathworks.com/help/database/ug/data-type-support.html ist das genau so richtig.

Es kommt aber nichts an.

Entgegen der oben genannten Doku werden nur dann Daten übermittelt, wenn ich nicht 'max' angebe sondern '1000'. Nur dann füllen sich die Datenfelder. Mit 'max' erhalte ich keine Fehler aber alle entsprechenden Datenfelder bleiben NULL. Andere Datentypen wie double oder int sind nicht betroffen.

Ich verwende folgende Verbindung:

Code:
conn = odbc("Driver=ODBC Driver 17 for SQL Server;SERVER=xyz;Trusted_Connection=Yes;DATABASE=SAlterung;");


Hat jemand einen Tipp?

Gruß

MQ
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.425
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.03.2022, 16:42     Titel:
  Antworten mit Zitat      
Hallo,

mit welchem Befehl versuchst du denn in die Datenbank zu schreiben?

Ich kann nicht versprechen, dass ich dann weiterhelfen kann. Bei so speziellen Fragestellungen würde ich generell empfehlen, den Technischen Support von MathWorks zu kontaktieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterQ
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.02.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2022, 09:55     Titel:
  Antworten mit Zitat      
Code:
sqlwrite(connsql, 'basetable', data );


Wenn die Tabelle basetable auf dem Server nicht existiert, wird sie automatisch angelegt. Das Problem hierbei ist, dass die Stringfelder bzw. deren Länge irgendwie geraten wird und so um die 100 liegt.

varchar(106) oder varchar(113) sind so typsiche Werte. Und dann komme ich mit Längen von 132k und das bricht natürlich ab. Ich habe per Hand dann auf nvarchar(max) geändert aber, wie gesagt, dann werden keine Werte geschrieben.

Gut geht es bis zu Feldlängen von 1000, also varchar(1000). Alles was darüber liegt wird ignoriert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.425
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2022, 17:41     Titel:
  Antworten mit Zitat      
Hallo,

hast du versucht, den Datentyp explizit anzugeben, z.B. über die ColumnType Option von sqlwrite?
Falls ja und das nicht funktioniert hat, kann ich nur nochmal den Technischen Support empfehlen. So tief bin ich leider nicht in Datenbanken drin.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MasterQ
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.02.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2022, 14:29     Titel:
  Antworten mit Zitat      
Hallo Harald,

bei MatLab geht es offensichtlich etwas chaotisch zu bei den Datenbanktreibern.

Ich hatte bisher mit ODBC gearbeitet und es deshalb damit versucht. MatWorks priorisiert aber wohl die Java-Treiber (JDBC).

Der TechService hat darauf hingewiesen, dass varchar(max) von odbc noch nicht unterstützt wird. Ich habe jetzt auf JDBC umgestellt und es geht.

Gruß

MQ
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.