Zum Inhalt wechseln


Foto

Belegnummernvergabe ohne auto_increment


  • Bitte melde dich an um zu Antworten
5 Antworten in diesem Thema

#1 jiscar

jiscar

    Newbie

  • 3 Beiträge

 

Geschrieben 25. Juli 2017 - 22:37

Hallo, 

Ich würde gerne einen Wert (Belegnummer) meiner Datenbank beim neu einlegen um 1 erhöhen ohne  auto_increment, evtl. mit ein Hilfstabelle oder ein FUNCTION.

 

Beispiel:

Letzter Schlüssel: 2017-0001

Nächster Schlüssel: 2017-0002

 

Hat jemand ein Fertig Lösung? 

 

Gruss, 

SQL-Anfänge



#2 Cybquest

Cybquest

    Expert Member

  • 1.886 Beiträge

 

Geschrieben 26. Juli 2017 - 07:24

Fertige Lösung nicht, aber Du könntest das mit nem "On Insert"-Trigger machen. Einfach mal "SQL Trigger on insert increment" o.ä. googlen :-)


My name is Frank, you can say you to me.

#3 zahni

zahni

    Expert Member

  • 16.463 Beiträge

 

Geschrieben 26. Juli 2017 - 08:47

Das geht in diese Richtung:

 

https://docs.microso...or-transact-sql

 

Da der gewünschte Wert aber ein String ist, könnte es schwierig werden.


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#4 jiscar

jiscar

    Newbie

  • 3 Beiträge

 

Geschrieben 26. Juli 2017 - 22:39

vielen Dank für Ihre schnelle Antwort.

 

@Cybquest: danke für den Tipp, Ich habe die "after insert Trigger" gegooglet und ein Halbe Lösung gefunden!

Diese Trigger funktioniert leider nur bis 2017-9999,

CREATE TABLE [dbo].[Task](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[TID] [nvarchar](50) NULL DEFAULT ('2017-0000'),
	[name] [nchar](10) NULL,
PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

go

ALTER trigger insertTask
on Task
after insert as
begin
    update Task
    set TID = REPLACE(CONVERT(CHAR(4), YEAR(GETDATE()), 103), '/', '')+'-'
                   + RIGHT('000' + CAST(inserted.ID AS VARCHAR(4)), 4)
    from Task
    join inserted on inserted.ID = Task.ID;
end;
go

insert into Task default values;
insert into Task default values;
insert into Task default values;
insert into Task default values;
insert into Task default values;


select * from Task;

Ich suche weiter ....Ich bin natürlich offen für Vorschläge ;)

 

Gruss



#5 Cybquest

Cybquest

    Expert Member

  • 1.886 Beiträge

 

Geschrieben 27. Juli 2017 - 09:12

was soll nach 9999 passieren?

Wenn pro Jahr mehr gehen muss, den hinteren Teil halt gleich 5-stellig machen?

... und dann den Teil einfach so ändern:

                   + RIGHT('0000' + CAST(inserted.ID AS VARCHAR(5)), 5)


My name is Frank, you can say you to me.

#6 jiscar

jiscar

    Newbie

  • 3 Beiträge

 

Geschrieben 27. Juli 2017 - 17:34

Ok Danke,  Ich werde so anpassen....

 

LG