Avatar billede kennethv Nybegynder
01. januar 2007 - 23:19 Der er 9 kommentarer og
1 løsning

SQL Syntax for Fieldname "ID"

Efter at have indsat en record med "Insert" kommandoen kunne jeg godt tænke mig at vide hvilket IDnummer min record har fundet. Hvordan kan det gøres? Jeg har et feltnavn som har idenity spefication sat til "Yes".
Avatar billede vallemanden Nybegynder
02. januar 2007 - 02:49 #1
hvilken database bruger du?
Avatar billede kennethv Nybegynder
02. januar 2007 - 10:49 #2
SQL 2000
Avatar billede hrc Mester
02. januar 2007 - 13:36 #3
MS-Sql 2000? Mon SCOPE_IDENTITY() virker i den version?

  Query.SQL.Text := 'insert into ... ';
  Query.ExecSQL;

  Query.SQL.Text := 'select SCOPE_IDENTITY()';
  Query.Open;
  try
    ID := Query.Fields[0].AsInteger;
  finally
    Query.Close;
  end;
Avatar billede kennethv Nybegynder
02. januar 2007 - 16:33 #4
Men vil denne løsning ikke være god nok?

Query.SQL.Text := 'insert into ... ';
  Query.ExecSQL;

  Query.SQL.Text := 'select SCOPE_IDENTITY()';
  Query.Open;
  try
    strID := Query.FieldByName('ID').AsString;
  finally
    Query.Close;
  end;
Avatar billede hrc Mester
02. januar 2007 - 17:00 #5
Så skal du rette scriptet til følgede:

  Query.SQL.Text := 'select SCOPE_IDENTITY() as ID';

men jo, så burde det virke. Mine inserts sker alle via stored procedures men SCOPE_IDENTITY() bør også virke på klient-siden; måske er der noget med sessions og transaktioner.
Avatar billede kennethv Nybegynder
03. januar 2007 - 09:27 #6
Ville denne også virke. Sidder ikk lige der hvor jeg har programmet.
  Query.SQL.Text := 'select @@IDENTITY() as ID';
  Query.Open;
  try
    strID := Query.FieldByName('ID').AsString;
  finally
    Query.Close;
  end;
Avatar billede hrc Mester
03. januar 2007 - 10:44 #7
Kan ikke helt forstå hvorfor du vil bruge en @@IDENTITY() (læs evt: http://davidhayden.com/blog/dave/archive/2006/01/17/2736.aspx) når der findes en SCOPE_IDENTITY(), men jo, det ville returnere det seneste genererede ID, men ikke nødvendigvis det tildelt den record du lige har indsat.

Prøv SCOPE_IDENTITY() og se om det virker. Søg eventuelt på MDSN:
  http://msdn2.microsoft.com/en-us/library/ms950404.aspx

her er TSQL-referencen:
  http://msdn2.microsoft.com/en-us/library/aa299742(SQL.80).aspx

Linket til afsnittet om scope_identity:
  http://msdn2.microsoft.com/en-us/library/aa259185(sql.80).aspx

Der er et problem med "scope" som jeg ikke helt kan gennemskue vil virke v. en SQL-sætning angivet i dit program. Måske hvis du putter det ind i en transaktion?? Prøv og hvis det ikke virker, så lav en stored procedure - det virker.
Avatar billede hrc Mester
03. januar 2007 - 10:45 #8
Måske er IDENT_CURRENT en løsning.
Avatar billede kennethv Nybegynder
03. januar 2007 - 12:56 #9
HRC:
Den første løsning virkede. Tak for det. Du skal ligge et svar.
Avatar billede hrc Mester
03. januar 2007 - 14:59 #10
Jeg lægger et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester