uneverno
Goto Top

Update in Access nach MSSQL konvertieren

Gesucht sind Entsprechungen zu einigen Access-Funktionalitäten

Ich möchte folgenden ACCESS-Befehl unter MSSQL lauffähig machen. MSSQL kennt z.B. kein UCase, Right, Left, Len und & vermutlich auch nicht. Wie sehen die entsprechenden Befehle - oder sofern sie nicht vorhanden sind Alternativen - in MSSQL aus?

Update Tabelle Set Name = "I:\NAME" & Right(Name, Len(name)-9) Where Ucase(Left(Name,9)) = "C:\NAME"

Es soll praktisch aus C:\NaMe\Pfad I:\NAME\Pfad gemacht werden.

Content-ID: 51569

Url: https://administrator.de/contentid/51569

Ausgedruckt am: 26.11.2024 um 05:11 Uhr

Biber
Biber 13.02.2007 um 18:50:34 Uhr
Goto Top
Moin UNeverNo,

Update Tabelle Set Name = 'I:\NAME' & Right(Name, Len(name)-7)   
 Where Upper(Left(Name,7)) = 'C:\NAME'  

HTH Biber
MadMax
MadMax 13.02.2007 um 22:45:08 Uhr
Goto Top
Nabend,

fast richtig Biber, aber das "&" muß einem "+" weichen. Außerdem ist "Len" mit Vorsicht zu genießen, weil es Leerzeichen am Ende nicht berücksichtigt. Sicherer ist da ein Substring (Name, 10, 8000), wobei die 8000 auch die Maximallänge von "Name" sein kann. Es ist jedenfalls kein Problem, wenn die Zahl größer ist, als die tatsächlich vorhandenen Zeichen. Dementsprechend würde der Befehl dann lauten:
Update Tabelle
Set Name = 'I:\NAME' + Substring (Name, 8, 8000)  
Where Upper (Left (Name, 7)) = 'C:\NAME'  

Gruß, Mad Max
Biber
Biber 13.02.2007 um 23:01:58 Uhr
Goto Top
Upps, mad Max,

mit dem "+" hast Du natürlich Recht.
Das TRIMmen wollte ich mir schenken, hatte es zwar gesehen, aber...
Aber egal, dann lass es uns weiter verfeinern:
Update Tabelle
Set Name = 'I:\NAME' + RTrim(Substring (Name, 8, 8000))  
Where Upper (Left (Name, 7)) = 'C:\NAME';  
-oder, an meine Variante angelehnt-
Update Tabelle 
Set Name = 'I:\NAME' + Right(Rtrim(Name), Len(RTrim(name))-7)   
 Where Upper(Left(Name,7)) = 'C:\NAME';  
oder wir jagen über alle Sätze zwei Statements rüber:
Update tabelle Set name = Replace(name, 'C:\', 'I:\');  
Update tabelle Set name = Replace(name, 'c:\', 'i:\');  
..hart, aber herzlich..

Grüsse
Biber
UNeverNo
UNeverNo 14.02.2007 um 10:10:31 Uhr
Goto Top
An Replace hatte ich in der Tat nicht gedacht...werde ich gleich mal probieren.
Hatte einen etwas umständlicheren Weg gewählt, der aus mir jedoch unerfindlichen Gründen nicht funktioniert...
Komischerweise wird auch die Funktion Left und Right nicht erkannt, d.h. das Syntaxhighlighting läßt den Befehl grau, statt in pink einzufärben.

In der Tabelle habe ich in der Spalte detail einen Wert à la
texttextnochmehrtextC:\pfadnochmehrtext

Testhalber wollte ich nur den Teil vor C:\pfad auslesen.
In Access sah das so aus
Select Left(detail,instr(detail,'C:\pfad')-1) FROM Tabelle  
In SQL-Server dachte ich an
SELECT Substring(Detail, 1, (Charindex('C:\pfad', Detail))-1) FROM Tabelle  
Das würde mir genau das liefern was ich brauche; allerdings weigert er sich strikt mir die -1 abzuziehen
Meldung 536, Ebene 16, Status 5, Zeile 4
Es wurde ein ungültiger Längenparameter an die SUBSTRING-Funktion übergeben.
+1 hingegen frißt er problemlos, ohne zusätzlich Addition liefert er
texttextnochmehrtextC
zurück, also genau das C zuviel...
MadMax
MadMax 14.02.2007 um 13:35:25 Uhr
Goto Top
Moin,

@Biber: man sollte wohl abends keine Beiträge mehr beantworten, wenn man müde ist übersieht man das Triviale face-wink

@UNeverNo: Du solltest mit
Where Charindex ('C:\pfad', Detail) > 0  
die Datensätze einschränken. Wenn 'C:\pfad' nämlich nicht in der Spalte Detail existiert, versucht er eine Zeichenkette der Länge -1 zu ermitteln, und dann krachts.

Gruß, Mad Max