ultimo scope_identity obtener mostrar insertado ejemplo decimales after sql-server primary-key scope-identity

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