Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 11405|Respuesta: 0

[Consejos] sql obtiene el valor principal de la clave tras esperar a INSERT

[Copiar enlace]
Publicado en 5/5/2015 17:35:51 | | |

Función de obtención de valores de identificación en SQL SERVER 2000     
  En SQL Server 2000, la columna identidad se define por IDENTIDAD, y lo siguiente está relacionado con obtener el valor identidad del último registro insertado   
   
  Ejemplo de ilustración de la función de apagado     
   
          En SQL Server, puedes usar SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() para obtener el valor del último registro insertado, y la diferencia entre ellos es:   
  SCOPE_IDENTITY() devuelve el último valor de IDENTIDAD insertado dentro de la columna IDENTIDAD en el mismo ámbito. Un ámbito es un módulo: procedimientos almacenados, disparadores, funciones   
   
  Números o lotes. Por lo tanto, si dos sentencias están en el mismo procedimiento almacenado, función o lote, están en el mismo ámbito.   
  @@IDENTITY Devuelve el último valor de identificación generado en todas las tablas de la sesión actual   
  IDENT_CURRENT() devuelve el último valor de identificación generado para la tabla especificada en cualquier sesión y en cualquier ámbito   
  Aquí tienes un ejemplo para ilustrar sus diferencias     
   
  -- a) Código de ejemplo     
  --   ===========================================   
  -- Crear una tabla de pruebas   
  --   ===========================================   
  USE tempdb   
  VETE   
   
  CREATE TABLE t1(id int IDENTIDAD, col int)   
  INSERTAR T1 SELECT 1   
  UNIÓN TODOS SELECCIONAN 2   
  CREATE TABLE t2(id int IDENTIDAD, col int)   
  VETE   
   
  CREAR TR_insert_t2 TRIGGER EN T2   
  PARA INSERCIÓN   
  COMO   
          INSERTAR T1 SELECT 3   
  VETE     
   
  --   ===========================================   
  -- Probar tres funciones: 1   
  --   ===========================================   
  INSERTAR VALORES T2(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultado   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (El número de filas afectadas es 1 fila)   
  --*/   
  VETE   
   
  --   ===========================================   
  -- Probar tres funciones: 2   
  --   ===========================================   
  INSERTAR VALORES T1(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultado   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (El número de filas afectadas es 1 fila)   
  --*/   
  VETE   
   
  --   ===========================================   
  -- Probar tres funciones: 3   
  -- ** Abre una nueva conexión y ejecuta el siguiente código **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultado   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 & n     
   
  --===========================================   
  -- Eliminar el entorno de prueba   
  --   ===========================================   
  DROP TABLE T1,T2     
   
  -- b) Descripción del resultado del código     
  Como puedes ver en el código anterior:   
  IDENT_CURRENT() siempre devuelve el último valor identificado insertado en la tabla especificada   
  @@IDENTITY Devuelve el valor de identidad de la sesión actual, ya sea en el mismo ámbito o no, en las pruebas 1 y 2 se puede ver que devuelve el valor de identidad del registro insertado en el trigger, y en   
   
  En la Prueba 3, se devuelve NULL porque no hay registro de inserción en la sesión actual   
  SCOPE_IDENTITY() devuelve el valor de identificación del mismo ámbito de la sesión actual, así que en la prueba 1, 2, devuelve el valor que no se ve afectado por el disparo, y en la prueba 3, porque la sesión actual no está interpolada   
   
  record, así que devuelve NULL





Anterior:¿Por qué todo el mundo fue al festivo del Primero de Mayo?
Próximo:¿Cuál es la diferencia entre que SCOPE_IDENTITY() se escriba antes y después en T-SQL?
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com