Kopieren/Einfügen reagiert anders als Anfügeabfrage

31/03/2008 - 16:53 von Katharina | Report spam
Hallo NG,
ich bin Anfànger beim SQL-Server 2005 und muss Daten aus ca. 70
Access-Tabellen per Code in den SQL-Server konvertieren.

Dazu habe ich auf dem SQL-Sever die Datenstruktur angelegt und per ODBC in
Access2003 eingebunden, dann gehe ich wie folgt vor:
1. Inhalt der Server Tabelle löschen
"DELETE sqlTabelle .* FROM sqlTabelle ;"

2. Inhalt der Access_Tabelle an Servertabelle anfügen.
"INSERT INTO sqlTabelle SELECT accTabelle.* FROM accTabelle;"

Das klappt soweit ganz gut, nur bei den Tabellen mit Primary-Key
(IsIdentity/Autowert) komme ich (meistens) auf Schlüsselverletzungen.
Wenn ich die Daten allerdings per Drag/Drop einfüge, habe ich keine
Probleme.
Woran liegt das?

Vor ca. 2 Wochen gab es die Anfrage 'INSERT INTO bei Lokaler
uelltabelle' - das ist sicherlich ein àhnliches Problem, aber meine
Versuche dem SQL-Server SET 'IDENTITY_INSERT sqlTabelle OFF' von Access aus
beizubringen sind klàglich gescheitert.

Danke schon mal für irgendwelche Hinweise

Katharina Dierking
 

Lesen sie die antworten

#1 Kurt Langeder
31/03/2008 - 17:20 | Warnen spam
Hallo Katharina

"Katharina" schrieb:
muss Daten aus ca. 70 Access-Tabellen per Code in den SQL-Server


konvertieren.

Vor ca. 2 Wochen gab es die Anfrage 'INSERT INTO bei Lokaler
uelltabelle' - das ist sicherlich ein àhnliches Problem, aber meine
Versuche dem SQL-Server SET 'IDENTITY_INSERT sqlTabelle OFF' von


Access aus
beizubringen sind klàglich gescheitert.



Bei mir hat der Tipp mit dem Setzen des SET IDENTITY_INSERT in einer
Pass-Through-Abfrage funktioniert. Hier mein Code dazu:

' hier der Access-Code zum Übertragen der Daten von einer lokalen
Accesstabelle ("accTabelle") an eine SQL-Tabeel ("sqlTabelle). Vorher
und nachher das IDENTITY_INSERT setzen.

X = SQL_SetIdentity("sqlTabelle", "ON")
DoCmd.RunSQL "INSERT INTO sqlTabelle SELECT * accTabelle"
X = SQL_SetIdentity("sqlTabelle", "OFF")



' Funktion für IDENTITY_INSERT-Setzen
Function SQL_SetIdentity(SetIdentityTab, SetOnOff) As Boolean
On Error Resume Next
Dim db As Database, qdf As QueryDef, aktError As Long
Set db = CurrentDb
Set qdf = db.CreateQueryDef("")
qdf.Connect = xxxx ' hier dein Connection-String für die
Verbindung zum SQL-Server
qdf.ReturnsRecords = False
qdf.SQL = "SET IDENTITY_INSERT " & SetIdentityTab & " " & SetOnOff
On Error GoTo Error_Exit_PT
qdf.Execute
Exit_PT:
qdf.Close: db.Close
SQL_SetIdentity = (aktError = 0)
Exit Function
Error_Exit_PT:
aktError = Err.Number
Resume Exit_PT
End Function

Hoffe das hilft auch dir weiter - bei mir hat's damit funktioniert.

Schöne Grüße
Kurt

Ähnliche fragen