PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MSSQL - Autoincrement selber bauen


HAL
04.01.2004, 23:29
Hallo zusammen,

hat jemand eine Idee zu folgendem MSSQL INSERT Task:

Ich möchte aus einer Tabelle (table1) den Max-Wert der Spalte Nummer ermitteln, dieser Tabelle Zeilen aus Tabelle 2 hinzufügen, dabei den Max-Wert bei jeder eingefügten Zeile um 1 erhöhen.

Mein Ansatz war:

INSERT INTO table1 (nummer, artnr, text)
SELECT (SELECT MAX(nummer) FROM table1)+1, artnr, text
FROM table2
WHERE table2.artnr LIKE 'Artikel%"

Problem:

Gibt es mehr als eine Zeile die eingefügt werden soll, erhalten alle weiteren Zeilen die gleiche Nummer. Nur bei der ersten Zeile wird Nummer um 1 erhöht.
Autoincrement kann nicht verwendet werden.

Schon mal Danke für Eure Hilfe im voraus

HAL


pate33
07.01.2004, 12:46
Es gibt doch fuer MSSQL eine datenbanknahe Programmiersprache (unter Oracle PL/SQL)? Mit der kannst du i.d.R. trigger fuer solche Zwecke schreiben.

so long

HAL
10.01.2004, 20:06
Die Sache mit dem Trigger hatte ich mir auch schon überlegt.
Leider kann ich auf die Tabelle keinen Trigger setzten, da die Anwendung, die auf die Daten zugreift damit nicht klarkommt.

Gruß

HAL

pate33
11.01.2004, 16:27
Trigger sind normal direkt auf der Datenbank, und haben mit der Anwendung nix zu tun ... Die kommen erst bei einem insert oder update Statement zum zuge ... d.h. es sollte da keine schwierigkeiten geben, wenn die trigger richtig eingestellt sind ...

HAL
11.01.2004, 17:09
Da die Anwendung aber geanau diese Insert u. Update Anweisungen vornimmt, halte ich einen Trigger hier nicht für die richtige Lösung.
Vielmehr müsste es doch möglich sein, eine Schleife zu konstruieren, die immer bevor ein Datensatz eingefügt wird, den höchsten vorhandenen Wert nimmt und um 1 inkrementiert.
Das ganze sollte dann noch als DTS Paket im Enterprisemanger verfügbar sein.

Soweit die frommen Wünsche....

Gruß HAL

harlekin6
18.05.2005, 10:45
mit Identity lässt sich ein autoincrement realisieren

CREATE TABLE #new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
)

INSERT #new_employees
(fname, minit, lname)
VALUES
('Karin', 'F', 'Josephs')