Discussion:
Berechtigung für SET IDENTITY_INSERT
(zu alt für eine Antwort)
Ulf Knochenhauer
2005-12-14 10:09:32 UTC
Permalink
Hallo NG,
in meinem A2003 ADP, SQL-Server2000 mache ich folgendes:
Ich gleiche 2 Artikeltabellen ab. Die Nummernkreise der ID´s sind
unterschiedlich.
strSQL = "SET IDENTITY_INSERT Datenbank1.dbo.Tabelle1 ON"
CurrentProject.Connection.Execute strSQL
strSQL = "INSERT INTO Datenbank1.dbo.Tabelle1 " & _
"(ID, ...)" & _
"SELECT ID, ...
"FROM ..." & _
"WHERE (...)"
CurrentProject.Connection.Execute strSQL
strSQL = "SET IDENTITY_INSERT Datenbank1.dbo.Tabelle1 OFF"
CurrentProject.Connection.Execute strSQL
Bei mir als dbo geht das. Aber bei den Usern kommt bei SET
IDENTITY_INSERT der Fehler, das sie nicht dbo sind.
Wie kann ich das machen, oder sollte ich auf Autowert verzichten?
Grüße
Ulf
Frank Kalis
2005-12-14 11:08:01 UTC
Permalink
Post by Ulf Knochenhauer
Ich gleiche 2 Artikeltabellen ab. Die Nummernkreise der ID´s sind
unterschiedlich.
strSQL = "SET IDENTITY_INSERT Datenbank1.dbo.Tabelle1 ON"
CurrentProject.Connection.Execute strSQL
strSQL = "INSERT INTO Datenbank1.dbo.Tabelle1 " & _
"(ID, ...)" & _
"SELECT ID, ...
"FROM ..." & _
"WHERE (...)"
CurrentProject.Connection.Execute strSQL
strSQL = "SET IDENTITY_INSERT Datenbank1.dbo.Tabelle1 OFF"
CurrentProject.Connection.Execute strSQL
Bei mir als dbo geht das. Aber bei den Usern kommt bei SET
IDENTITY_INSERT der Fehler, das sie nicht dbo sind.
Wie kann ich das machen, oder sollte ich auf Autowert verzichten?
Ich glaube, du solltest hier noch weitere Informationen geben.

Was genau willst du abgleichen?
Warum schreibst du in eine IDENTITY Spalte, um abzugleichen?
...
--
Frank Kalis
Microsoft SQL Server MVP
http://www.insidesql.de
Heute schon gebloggt? http://www.insidesql.de/blogs
Ulf Knochenhauer
2005-12-14 11:16:52 UTC
Permalink
Hallo Frank,
Post by Frank Kalis
Post by Ulf Knochenhauer
Ich gleiche 2 Artikeltabellen ab. Die Nummernkreise der ID´s sind
unterschiedlich.
strSQL = "SET IDENTITY_INSERT Datenbank1.dbo.Tabelle1 ON"
CurrentProject.Connection.Execute strSQL
strSQL = "INSERT INTO Datenbank1.dbo.Tabelle1 " & _
"(ID, ...)" & _
"SELECT ID, ...
"FROM ..." & _
"WHERE (...)"
CurrentProject.Connection.Execute strSQL
strSQL = "SET IDENTITY_INSERT Datenbank1.dbo.Tabelle1 OFF"
CurrentProject.Connection.Execute strSQL
Bei mir als dbo geht das. Aber bei den Usern kommt bei SET
IDENTITY_INSERT der Fehler, das sie nicht dbo sind.
Wie kann ich das machen, oder sollte ich auf Autowert verzichten?
Ich glaube, du solltest hier noch weitere Informationen geben.
ich habe 2 Artikeltabellen mit je einer ID als Primärschlüssel.
Tabelle1 - alle ID´s sind <10000
Tabelle2 - alle ID´s sind >10000
Jetzt kopiere ich einen Artikel von Tabelle1 nach Tabelle2 incl. ID.
Jetzt muss ich um den Artikel z. B. mit der ID 5012 an Tabelle2
anzuhängen den Autowert der ID von Tabelle2 ausschalten. Dann Artikel
anfügen und Autowert wieder einschalten.

Ein anderer Ansatz wäre, die ID´s selbst zu verwalten und nicht
automatisch hochzählen zu lassen. Das kommt mir jetzt praktikabler vor.
Grüße
Ulf
Frank Kalis
2005-12-14 12:51:58 UTC
Permalink
Post by Ulf Knochenhauer
ich habe 2 Artikeltabellen mit je einer ID als Primärschlüssel.
Tabelle1 - alle ID´s sind <10000
Tabelle2 - alle ID´s sind >10000
Jetzt kopiere ich einen Artikel von Tabelle1 nach Tabelle2 incl. ID.
Jetzt muss ich um den Artikel z. B. mit der ID 5012 an Tabelle2
anzuhängen den Autowert der ID von Tabelle2 ausschalten. Dann Artikel
anfügen und Autowert wieder einschalten.
Dieses Verfahren ist wenig skalierbar.
Warum hast du überhaupt 2 verschiedene Artikeltabellen? Wäre es nicht
sinnvoller, eine einzige Tabelle zu haben mit den entsprechenden Attributen,
bzw. sinnvollen Unterscheidungskriterien?
Post by Ulf Knochenhauer
Ein anderer Ansatz wäre, die ID´s selbst zu verwalten und nicht
automatisch hochzählen zu lassen. Das kommt mir jetzt praktikabler vor.
Du könntest ja trotzdem deine IDENTITY Spalte als PK haben. Allerdings würde
ich
diese als zusätzliche Spalte einfügen zusätzlich zu der von dir wie auch
immer vergebenen Artikelnummer. Auf diese Weise mußt du dir um SET
IDENTITY... und Eindeutigkeit des PK's keine Gedanken machen, sondern kannst
dich darauf konzentrieren, wie du Duplikate beim Hin- und Herkopieren
vermeidest.
--
Frank Kalis
Microsoft SQL Server MVP
http://www.insidesql.de
Heute schon gebloggt? http://www.insidesql.de/blogs
Ulf Knochenhauer
2005-12-14 13:15:58 UTC
Permalink
Hallo Frank,
Post by Frank Kalis
Dieses Verfahren ist wenig skalierbar.
Warum hast du überhaupt 2 verschiedene Artikeltabellen? Wäre es nicht
sinnvoller, eine einzige Tabelle zu haben
das ist das Ziel der Massnahme. Wenn die einzelnen
Artikelgruppenverantwortlichen ihre Artikel abgeglichen haben, fällt die
eine Tabelle weg.
Grüße
Ulf

Loading...