Si tengo una declaración de inserción como:
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
¿Cómo configuro @var INT
el valor de identidad de la nueva fila (llamado Id
) usando la cláusula OUTPUT? He visto ejemplos de poner INSERTED.Name en variables de tabla, por ejemplo, pero no puedo incluirlo en una variable que no sea de tabla.
Lo he intentado OUPUT INSERTED.Id AS @var
, SET @var = INSERTED.Id
pero ninguno ha funcionado.
sql
sql-server-2005
insert
Yatrix
fuente
fuente
OUTPUT
cláusula.OUTPUT
cláusula escribe en una mesa. Puede ser una tabla variable, una tabla temporal, ....Respuestas:
Puede hacer que la ID recién insertada se envíe a la consola SSMS de esta manera:
También puede usar esto desde, por ejemplo, C #, cuando necesite devolver la ID a su aplicación de llamada, simplemente ejecute la consulta SQL con
.ExecuteScalar()
(en lugar de.ExecuteNonQuery()
) para leer laID
respuesta resultante .O si necesita capturar el recién insertado
ID
T-SQL (por ejemplo, para un procesamiento posterior), debe crear una variable de tabla:De esta manera, puede poner múltiples valores
@OutputTbl
y procesarlos más. También puede usar una tabla temporal "regular" (#temp
) o incluso una tabla persistente "real" como su "objetivo de salida" aquí.fuente
real persistent table
- esto es extremadamente fantástico porque significa que puedeINSERT
obtener información enTWO
tablas al mismo tiempo.SCOPE_IDENTITY()
funciona mejor para eso.