Strona główna
  last INSERT id MSSQL

kaniagostyn *UKS Kania Gostyń

Dlast. Juzer Grzegorz Danowski <gdn__na@serwerze__poczta.onet.plnapisał

|| DFirts, DLast wbrew pozorom zwracają ci przypadkowy rekord, chyba, że
|| stosujesz go do kweredy z sortowaniem. Stosowanie DFirst i DLast do
|| tabeli nie ma najmniejszego sensu.

| A nie jest tak, że DFirst, DLast zapuszczone na tabeli zwracają rekord
| wg kolejności klucza głównego? Coś mi tak chodzi po głowie, ale pewnie
| się mylę.

Generalnie wg kolejności klucza głównego, ale ... jedynie po
defragmentacji !
(pod warunkiem, ze mówimy o mdb, z Identity przyrostowym!)

Jeśli kluczem głównym jest autonumer (przyrostowy!) i nie ma kwerend typu
"insert into tabela1 (id ...) Values (1000, ...)", które by jawnie
wpisywały do autonumeru coś w innym niż naturalny porządek, to ok!

Ale są przypadki zarówno Insertów z jawnym nadawaniem autonumeru, jak
tabele z autonumerem losowym ! W każdym z tych przypadków klucz główny nie
będzie ustawiony w porządku dodawania!
Zupełnie już pominę kwestię kluczy naturalnych, których generalnie nie
używam !

Jeszcze inna sprawa to merge-replication w MS-SQL, gdzie MS-SQL bierze na
siebie kwestię zakresów "autonumeru" dostępnego dla każdego z juzerów.
W skrócie: juzer =1 dodaje rekordy w zakresie 1-2000, a juzer = 2 w
zakresie 2001-4000, a juzer = N w zakresie (2N-1)*1000 - 2N*1000.
Jak któryś dojdzie do 80% dostępnego zakresu, to agent replikacji
automatycznie przerzuci mu zakres na pierwszy nie zajęty ...

Znów wracając do accessa:
mam klucz naturalny: nr klienta / rok / miesiąc / kolejna faktura tego
klienta w miesiącu
czyli tekst typu 124/2006/6/12
po każdej defragmentacji porządek rekordów będzie zgodny z porządkiem
alfabetycznym tego klucza !

Summa summarum, nawet porządek Identity przyrostowego w wielu przypadkach
NIE WSKAZUJE na rekord rzeczywiście ostatnio wpisany !
To co mówi help jest prawdą: w ogólnym przypadku First i Last zwracają to
samo co DLookUp - coś zupełnie przypadkowego!

Użyteczność tych pierwszych jest wyraźna jedynie przy odpowiednim sorcie !
Ale zwykle dokładnie to samo można uzyskać przy pomocy Max lub Min -
wystarczy ruszyć głową i nigdy nie polegać na naturalnym porządku zapisu
rekordów w pliku!


LastModyfity ADO ???. Przyklad z BooksOnLine SQL7
Przepraszam, ze w angielskim (brak czasu)
---
Syntax
@@IDENTITY

Return Types
numeric

Remarks
After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY
contains the last identity value generated by the statement. If the statement
did not affect any tables with identity columns, @@IDENTITY returns NULL. If
multiple rows are inserted, generating multiple identity values, @@IDENTITY
returns the last identity value generated. If the statement fires on or more
triggers that perform inserts that generate identity values, calling @@IDENTITY
immediately after the statement returns the last identity value generated by the
triggers. The @@IDENTITY value does not revert to a previous setting if the
INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is
rolled back.

Examples
This example inserts a row into a table with an identity column and uses
@@IDENTITY to display the identity value used in the new row.

INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES ('Accountant',12,125)

SELECT @@IDENTITY AS 'Identity'

===

SÂławomir Kupski <s@kot.com.plw wiadomoÂści 956nf5$89@h1.uw.edu.pl
oznajmiÂł/a:

dokÂładnie chodi mi o ID przyznawany przez sekwencjĂż
tymczasowo rozwiÂązalem to metodÂą MoveLast i robi to co chcĂż ale nie jestem
do tego przekonany
W DAO bylo LastModyfity i rozwiÂązywalo caÂły problem
Korzystam z MSSQL 2000

Sprawa z datÂą chyba odpada ale jeszcze siĂż nad tym zastanowiĂż

Slawek

| Czy nie jest lepiej do rekordu dopisaĂŚ jego datĂż modyfikacji ?

| ByĂŚ moÂże chodzi ci o ostatnio przyznany ID przez sekwencjĂż. Wtedy poczytaj
| dokumentacjĂż bazy danych, którÂą uÂżywasz. Tam bĂżdzie odpowiedÂź.



LastModyfity ADO ???. Chyba zapomniałem dodać iż wszystkie operacje wykonywane są na recordset-ach
Slawek


Przyklad z BooksOnLine SQL7
Przepraszam, ze w angielskim (brak czasu)
---
Syntax
@@IDENTITY

Return Types
numeric

Remarks
After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY
contains the last identity value generated by the statement. If the
statement
did not affect any tables with identity columns, @@IDENTITY returns NULL.
If
multiple rows are inserted, generating multiple identity values,
@@IDENTITY
returns the last identity value generated. If the statement fires on or
more
triggers that perform inserts that generate identity values, calling
@@IDENTITY
immediately after the statement returns the last identity value generated
by the
triggers. The @@IDENTITY value does not revert to a previous setting if
the
INSERT or SELECT INTO statement or bulk copy fails, or if the transaction
is
rolled back.

Examples
This example inserts a row into a table with an identity column and uses
@@IDENTITY to display the identity value used in the new row.

INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES ('Accountant',12,125)

SELECT @@IDENTITY AS 'Identity'

===

Sławomir Kupski <s@kot.com.plw wiadomości 956nf5$89@h1.uw.edu.pl
oznajmił/a:
| dokładnie chodi mi o ID przyznawany przez sekwencję
| tymczasowo rozwiązalem to metodą MoveLast i robi to co chcę ale nie
jestem
| do tego przekonany
| W DAO bylo LastModyfity i rozwiązywalo cały problem
| Korzystam z MSSQL 2000

| Sprawa z datą chyba odpada ale jeszcze się nad tym zastanowię

| Slawek

| | | Czy nie jest lepiej do rekordu dopisać jego datę modyfikacji ?

| Być może chodzi ci o ostatnio przyznany ID przez sekwencję. Wtedy
poczytaj
| dokumentację bazy danych, którą używasz. Tam będzie odpowiedź.



Zwrot pola zaraz po INSERT 'cie (teoria).  mojeza <naj@hotmail.com napisał(a):

On Aug 28, 1:31 pm, Jacek <ad@moj.pl wrote:
To mi wyglada, jak zastanawianie sie nad jajkiem i kura:)

No nie koniecznie, wychodzac z Twojego zalozenia mozna sobie narobic
klopotow. W MS SQL istnieja 3 sposoby aby uzyskac identity column po
INSERT, napewno w MySQL sa takie same odpowiedniki:

<COPY BOL
SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in
that they return values inserted into IDENTITY columns.

IDENT_CURRENT is not limited by scope and session; it is limited to a
specified table. IDENT_CURRENT returns the value generated for a
specific table in any session and any scope. For more information, see
IDENT_CURRENT.

SCOPE_IDENTITY and @@IDENTITY will return last identity values
generated in any table in the current session. However, SCOPE_IDENTITY
returns values inserted only within the current scope; @@IDENTITY is
not limited to a specific scope.

For example, you have two tables, T1 and T2, and an INSERT trigger
defined on T1. When a row is inserted to T1, the trigger fires and
inserts a row in T2. This scenario illustrates two scopes: the insert
on T1, and the insert on T2 as a result of the trigger.

Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and
SCOPE_IDENTITY will return different values at the end of an INSERT
statement on T1.

@@IDENTITY will return the last IDENTITY column value inserted across
any scope in the current session, which is the value inserted in T2.

SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which
was the last INSERT that occurred in the same scope. The
SCOPE_IDENTITY() function will return the NULL value if the function
is invoked before any insert statements into an identity column occur
in the scope.
</COPY BOL

Tak wiec nalezy znalesc odpowiednik SCOPE_IDENTITY() w MySQL i nie
bedzie problemow.

Wykonanie ponizszego kodu generuje blas

insert into test (id,name) value ('','test');
SELECT @@IDENTITY;

#1064 - Something is wrong in your syntax obok '@IDENTITY' w linii 1

Samo uzycie
SELECT @IDENTITY; zwaraca NULL

Panowie inne pomysly?


Zwrot pola zaraz po INSERT 'cie (teoria).   Ula pisze:

 mojeza <naj@hotmail.com napisał(a):

On Aug 28, 1:31 pm, Jacek <ad@moj.pl wrote:
To mi wyglada, jak zastanawianie sie nad jajkiem i kura:)
No nie koniecznie, wychodzac z Twojego zalozenia mozna sobie narobic
klopotow. W MS SQL istnieja 3 sposoby aby uzyskac identity column po
INSERT, napewno w MySQL sa takie same odpowiedniki:

<COPY BOL
SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in
that they return values inserted into IDENTITY columns.

IDENT_CURRENT is not limited by scope and session; it is limited to a
specified table. IDENT_CURRENT returns the value generated for a
specific table in any session and any scope. For more information, see
IDENT_CURRENT.

SCOPE_IDENTITY and @@IDENTITY will return last identity values
generated in any table in the current session. However, SCOPE_IDENTITY
returns values inserted only within the current scope; @@IDENTITY is
not limited to a specific scope.

For example, you have two tables, T1 and T2, and an INSERT trigger
defined on T1. When a row is inserted to T1, the trigger fires and
inserts a row in T2. This scenario illustrates two scopes: the insert
on T1, and the insert on T2 as a result of the trigger.

Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and
SCOPE_IDENTITY will return different values at the end of an INSERT
statement on T1.

@@IDENTITY will return the last IDENTITY column value inserted across
any scope in the current session, which is the value inserted in T2.

SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which
was the last INSERT that occurred in the same scope. The
SCOPE_IDENTITY() function will return the NULL value if the function
is invoked before any insert statements into an identity column occur
in the scope.
</COPY BOL

Tak wiec nalezy znalesc odpowiednik SCOPE_IDENTITY() w MySQL i nie
bedzie problemow.

Wykonanie ponizszego kodu generuje blas

insert into test (id,name) value ('','test');
SELECT @@IDENTITY;

#1064 - Something is wrong in your syntax obok '@IDENTITY' w linii 1

Samo uzycie
SELECT @IDENTITY; zwaraca NULL

Panowie inne pomysly?

a dodajesz cos w insercie ?

bo twoj insert jest zly :
insert into test (id,name) value (NULL,'test');
badz taki
insert into test (name) value ('test');

przy zalazeniu ze id to autoincrement

a dzila na 100% bo wykorzystuje w aplikacji pisanej C# w php
wykorzystuje mysql_insert_id();


Zwrot pola zaraz po INSERT 'cie (teoria). keczerad <kecze@poczta.fm napisał(a):

  Ula pisze:
 mojeza <naj@hotmail.com napisał(a):

On Aug 28, 1:31 pm, Jacek <ad@moj.pl wrote:
To mi wyglada, jak zastanawianie sie nad jajkiem i kura:)
No nie koniecznie, wychodzac z Twojego zalozenia mozna sobie narobic
klopotow. W MS SQL istnieja 3 sposoby aby uzyskac identity column po
INSERT, napewno w MySQL sa takie same odpowiedniki:

<COPY BOL
SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions in
that they return values inserted into IDENTITY columns.

IDENT_CURRENT is not limited by scope and session; it is limited to a
specified table. IDENT_CURRENT returns the value generated for a
specific table in any session and any scope. For more information, see
IDENT_CURRENT.

SCOPE_IDENTITY and @@IDENTITY will return last identity values
generated in any table in the current session. However, SCOPE_IDENTITY
returns values inserted only within the current scope; @@IDENTITY is
not limited to a specific scope.

For example, you have two tables, T1 and T2, and an INSERT trigger
defined on T1. When a row is inserted to T1, the trigger fires and
inserts a row in T2. This scenario illustrates two scopes: the insert
on T1, and the insert on T2 as a result of the trigger.

Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and
SCOPE_IDENTITY will return different values at the end of an INSERT
statement on T1.

@@IDENTITY will return the last IDENTITY column value inserted across
any scope in the current session, which is the value inserted in T2.

SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which
was the last INSERT that occurred in the same scope. The
SCOPE_IDENTITY() function will return the NULL value if the function
is invoked before any insert statements into an identity column occur
in the scope.
</COPY BOL

Tak wiec nalezy znalesc odpowiednik SCOPE_IDENTITY() w MySQL i nie
bedzie problemow.

Wykonanie ponizszego kodu generuje blas

insert into test (id,name) value ('','test');
SELECT @@IDENTITY;

#1064 - Something is wrong in your syntax obok '@IDENTITY' w linii 1

Samo uzycie
SELECT @IDENTITY; zwaraca NULL

Panowie inne pomysly?

a dodajesz cos w insercie ?

bo twoj insert jest zly :
insert into test (id,name) value (NULL,'test');
badz taki
insert into test (name) value ('test');

przy zalazeniu ze id to autoincrement

a dzila na 100% bo wykorzystuje w aplikacji pisanej C# w php
wykorzystuje mysql_insert_id();

Zgadzam sie ze mysql_insert_id(); zwroci nr wiersza ale jak zrobic to w
czystym SQL'u?

INSERT INTO test (id,name) VALUE (NULL,'test');
.... i tu co?


  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shirli.pev.pl


  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • grabaz.htw.pl
  •  Menu
     : kaniagostyn *UKS Kania Gostyń
     : LAST_INSERT_ID MySQL
     : Laura Pawela
     : Lanos club
     : ładowanie kartusza Twinmaster z butli
     : ladne wiersze do pamiętnika
     : Łamanie haseł poczty Outlook
     : Lampa na podczerwień wikipedia
     : laura forastieri actriz mexico
     : lasy na Biesiadce
     : Labirynty dla przedszkola
     . : : .
    Copyright (c) 2008 kaniagostyn *UKS Kania Gostyń | Designed by Elegant WPT