Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 11405|Atbildi: 0

[Padomi] sql saņem primārās atslēgas vērtību pēc INSERT gaidīšanas

[Kopēt saiti]
Publicēts 05.05.2015 17:35:51 | | |

Identifikācijas vērtības iegūšanas funkcija programmā SQL SERVER 2000     
  Programmā SQL Server 2000 kolonna identitāte ir definēta ar IDENTITY, un tālāk norādītais ir saistīts ar pēdējā ievietotā ieraksta identitātes vērtības iegūšanu   
   
  Izslēgtas funkcijas piemērs     
   
          Programmā SQL Server varat izmantot SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT(), lai iegūtu pēdējā ievietotā ieraksta vērtību, un atšķirība starp tām ir:   
  SCOPE_IDENTITY() atgriež pēdējo IDENTITY vērtību, kas ievietota kolonnā IDENTITY tajā pašā tvērumā. Darbības joma ir modulis - saglabātās procedūras, trigeri, funkcijas   
   
  Skaitļi vai partijas. Tāpēc, ja divi priekšraksti ir vienā saglabātajā procedūrā, funkcijā vai paketē, tie ir vienā tvērumā.   
  @@IDENTITY Atgriež pēdējo identifikācijas vērtību, kas ģenerēta visās pašreizējās sesijas tabulās   
  IDENT_CURRENT() atgriež pēdējo identifikācijas vērtību, kas ģenerēta norādītajai tabulai jebkurā sesijā un tvērumā   
  Šeit ir piemērs, lai ilustrētu to atšķirības     
   
  -- a) Parauga kods     
  --   ===========================================   
  -- Testa tabulas izveide   
  --   ===========================================   
  IZMANTOJIET tempdb   
  IET   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  IEVIETOT T1 ATLASĪT 1   
  SAVIENĪBA VISI ATLASĪT 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  IET   
   
  TRIGERA TR_insert_t2 IZVEIDE T2   
  IEVIETOŠANAI   
  KĀ   
          IEVIETOT T1 IZVĒLIETIES 3   
  IET     
   
  --   ===========================================   
  - Pārbaudiet trīs funkcijas: 1   
  --   ===========================================   
  IEVIETOJIET T2 VĒRTĪBAS [1]   
  ATLASIET [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() T1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultāts   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 IDENT_CURRENT() T2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Ietekmēto rindu skaits ir 1 rinda)   
  --*/   
  IET   
   
  --   ===========================================   
  - Pārbaudiet trīs funkcijas: 2   
  --   ===========================================   
  IEVIETOJIET T1 VĒRTĪBAS [10]   
  ATLASIET [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() T1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultāts   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 IDENT_CURRENT() T2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Ietekmēto rindu skaits ir 1 rinda)   
  --*/   
  IET   
   
  --   ===========================================   
  - Pārbaudiet trīs funkcijas: 3   
  -- ** Atveriet jaunu savienojumu un izpildiet šādu kodu **   
  --   ===========================================   
  ATLASIET [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() T1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultāts   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 IDENT_CURRENT() T2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Dzēst testa vidi   
  --   ===========================================   
  NOLAIŽAMĀ TABULA T1,T2     
   
  -- b) Koda rezultāta apraksts     
  Kā redzat no iepriekš minētā koda:   
  IDENT_CURRENT() vienmēr atgriež pēdējo identificēto vērtību, kas ievietota norādītajā tabulā   
  @@IDENTITY Atgriež pašreizējās sesijas identitātes vērtību neatkarīgi no tā, vai tā ir tajā pašā tvērumā vai nē, 1. un 2. testā var redzēt, ka tā atgriež ievietotā ieraksta identitātes vērtību trigerā, un   
   
  3. testā NULL tiek atgriezts, jo pašreizējā sesijā nav ievietošanas ieraksta   
  SCOPE_IDENTITY() atgriež tā paša pašreizējās sesijas tvēruma identifikācijas vērtību, tāpēc 1. un 2. testā tiek atgriezta vērtība, kuru neietekmē trigeris, un 3. testā, jo pašreizējā sesija netiek interpolēta   
   
  ierakstu, tāpēc tiek atgriezta vērtība NULL





Iepriekšējo:Kāpēc visi devās uz maija svētkiem?
Nākamo:Kāda ir atšķirība starp SCOPE_IDENTITY() rakstīšanu pirms un pēc t-sql?
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com