sql-server - obtener - scope_identity() sql server
¿Por qué seleccionar SCOPE_IDENTITY() devuelve un decimal en lugar de un entero? (4)
¿No puedes simplemente lanzarlo antes de devolverlo de tu consulta o de tu proc almacenado (los SPs siempre devuelven int de todos modos, pero tal vez estás usando un parámetro de salida)?
Al igual que SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
¿Y por qué hace esto? Probablemente para ser más flexible y manejar números más grandes.
Así que tengo una tabla con una columna de identidad como clave principal, por lo que es un número entero. Entonces, ¿por qué SCOPE_IDENTITY()
siempre devuelve un valor decimal en lugar de un int a mi aplicación C #? Esto es realmente molesto ya que los valores decimales no se convertirán implícitamente en enteros en C #, lo que significa que ahora tengo que reescribir un montón de cosas y tener muchos métodos auxiliares porque uso SQL Server y Postgres, que Postgres devuelve un entero para el función equivalente ..
¿Por qué SCOPE_IDENTITY()
no solo devuelve un entero simple? ¿Hay personas que comúnmente usan valores decimales / no identitarios para las claves primarias?
En SQL Server, la propiedad IDENTITY
se puede asignar a tinyint
, smallint
, int
, bigint
, decimal(p, 0)
o numeric(p, 0)
. Por lo tanto, la función SCOPE_IDENTITY
debe devolver un tipo de datos que pueda abarcar todo lo anterior.
Como han dicho las respuestas anteriores, simplemente transfiéralo a int
en el servidor antes de devolverlo, luego ADO.NET detectará su tipo como usted espera.
intenta usar esto y obtendrás un entero de vuelta:
ExecuteScalar(''insert...; select CONVERT(int,scope_identity())'');
El valor de retorno de identidad del alcance es decimal (38,0)
CAST, use la cláusula OUTPUT o asigne un parámetro de salida en lugar de SELECT SCOPE_IDENTITY()
al cliente