You are not logged in.

  • Login
  • "GWC_Vegeta" started this thread

Posts: 2,153

Location: Freiberg

Occupation: GER

  • Send private message

1

Wednesday, March 4th 2009, 8:38pm

SQL-Frage

folgendes:

Ich habe eine ID-Spalte die nicht null sein darf und als Primärschlüssel definiert ist.
Jetzt will ich ein Tubpel einfügen dessen ID einen beliebigen int-Wert bekommen soll, der aber logischerweise noch nicht vorkommen darf.

Wie kann ich daß im rahmen eines INSERT befehls machen?
Gibt es da was sql-server spezifisches?
Ich will/kann die Spalte eigentlich nicht als IDENTIFY setzen.

Posts: 2,655

Location: Schweinfurt

Occupation: GER

  • Send private message

2

Wednesday, March 4th 2009, 8:45pm

Je nachdem welcher SQL Dialekt das ist, macht das deine Datenbank automatisch. Die wird einfach die nächste logisch folgende Zahl nehmen. Beim Insert brauchst du dich um diese Spalte nicht mehr explezit zu kümmern.

3

Wednesday, March 4th 2009, 9:10pm

Bei MySQL auto increment und bei Oracle Sequences

Frosti

Intermediate

Posts: 240

Occupation: GER

  • Send private message

4

Wednesday, March 4th 2009, 11:56pm

MaxPower hats schon gesagt ;)

Keine Ahnung hört sich nach einer Uni Aufgabe an bei der du evtl mit sowas nicht kommen kannst:

Denke Formell kannst auch über z.n MAX(ID) +1 auf den vorigen Wert Bezug nehmen unter der Prämisse, dass die SQL Befehle nacheinander abgearbeitet werden und dann einfach die größte ID um eins erhöhen ;)
Allerdings hat das mit Performance nichts zu tun!

This post has been edited 1 times, last edit by "Frosti" (Mar 4th 2009, 11:57pm)


  • "GWC_Vegeta" started this thread

Posts: 2,153

Location: Freiberg

Occupation: GER

  • Send private message

5

Thursday, March 5th 2009, 7:21am

Mit "sql-server spezifisches" meinte ich eigentlich microsoft sql server 2008. Also T-SQL

Frosti

Intermediate

Posts: 240

Occupation: GER

  • Send private message

6

Thursday, March 5th 2009, 8:58am

mir ist dort nur identity bekannt... that's the ms way.

create table mytable
(
[ID] IDENTITY(1,1) Primary Key
)

This post has been edited 1 times, last edit by "Frosti" (Mar 5th 2009, 8:59am)


-=)GWC(RaMsEs

Unregistered

7

Thursday, March 5th 2009, 10:14am

hm T SQL eknn ich jetzt nicht aber bei SQL geht as mit einer sequence.

MfG_iLGenio

Professional

Posts: 894

Occupation: AUT

  • Send private message

8

Thursday, March 5th 2009, 12:02pm

Schreib eine Stored Procedure, die edir eine rdm ID zurückliefert die es noch nicht gibt. Man muss halt alle IDs auslesen. Oder noch besser einen Trigger before Insert.

T SQL kenn ich nicht, sollte aber gehen.

-=)GWC(RaMsEs

Unregistered

9

Thursday, March 5th 2009, 1:36pm

Quoted

Original von MfG_iLGenio
Schreib eine Stored Procedure, die edir eine rdm ID zurückliefert die es noch nicht gibt. Man muss halt alle IDs auslesen. Oder noch besser einen Trigger before Insert.

T SQL kenn ich nicht, sollte aber gehen.


o_O

Ist vielleicht Microsoft aber das muss besser gehen :-D und wenn man sich nur einen Trigger before insert schreibt der einem den wert aus einer tabelle holt und dann den mit n+1 updated. damit hat man sich im endeffekt eine einfache sequence selber geschrieben.

10

Thursday, March 5th 2009, 3:22pm

Quoted

Original von MfG_iLGenio
Schreib eine Stored Procedure, die edir eine rdm ID zurückliefert die es noch nicht gibt. Man muss halt alle IDs auslesen. Oder noch besser einen Trigger before Insert.

T SQL kenn ich nicht, sollte aber gehen.


Stored Procedure? Trigger? Nur fuer ne ID? Nicht gerade die eleganteste Loesung, bin mir sicher dass MS da etwas anbietet was etwas "natuerlicher" ist...

Ausserdem sollte es concurrency-safe sein, also sowas wie atomare inserts (also stored procedure call und insert ist eine atomare option)

MfG_iLGenio

Professional

Posts: 894

Occupation: AUT

  • Send private message

11

Thursday, March 5th 2009, 4:01pm

oops sry. Sollte genauer lesen :/ Dachte er will eine zufallsgenerierte ID. :D

Frosti

Intermediate

Posts: 240

Occupation: GER

  • Send private message

12

Thursday, March 5th 2009, 4:18pm

@ max

Quoted

Original von Frosti
create table mytable
(
[ID] IDENTITY(1,1) Primary Key
)


das ist das gegenstück zu auto increment. um 1 hochzählen, start bei 1

This post has been edited 1 times, last edit by "Frosti" (Mar 5th 2009, 4:18pm)


13

Thursday, March 5th 2009, 5:41pm

Quoted

Original von Frosti
@ max

Quoted

Original von Frosti
create table mytable
(
[ID] IDENTITY(1,1) Primary Key
)


das ist das gegenstück zu auto increment. um 1 hochzählen, start bei 1


kann sein:) Ich hab das aber auch nicht in frage gestellt:)

  • "GWC_Vegeta" started this thread

Posts: 2,153

Location: Freiberg

Occupation: GER

  • Send private message

14

Thursday, March 5th 2009, 6:02pm

mhhh
Könnte vielleicht so eine @@ variable geben in der eine zufällige unvergebene primärschlüssel-id steht

Aber werd ich wohl doch die spalte mit IDENTITY versehen müssen.