14 Stimmen

T-SQL, Insert into mit MAX()+1 in subquery erhöht nicht, Alternativen?

Ich habe eine Abfrage, wo ich "Batch" Zeilen in eine Tabelle mit einem Primärschlüssel ohne Identität einfügen müssen.

--TableA
--PK int (Primary key, no-identity)
--CustNo int
INSERT INTO TableA (PK,CustNo)
  SELECT (SELECT MAX(PK)+1 AS PK FROM TableA), CustNo
  FROM Customers

(vereinfachtes Beispiel - bitte keine Kommentare zu möglichen Gleichzeitigkeitsproblemen :-))

Das Problem ist, dass es nicht die PK "für jede" verarbeitete Zeile inkrementiert, und ich bekomme eine Primärschlüsselverletzung.

Ich weiß, wie man es mit einem Cursor/While-Schleife zu tun, aber ich möchte, dass zu vermeiden, und lösen Sie es in einer Set-basierte Art von Weise, wenn das überhaupt möglich ist?

(mit SQL Server 2008 Standard)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X