J'ai donc une table avec une colonne d'identité comme clé primaire, donc c'est un entier. Alors, pourquoi SCOPE_IDENTITY()
renvoie toujours une valeur décimale au lieu d'un int à mon application C #? C'est vraiment ennuyeux car les valeurs décimales ne seront pas implicitement converties en nombres entiers en C #, ce qui signifie que je dois maintenant réécrire un tas de choses et avoir beaucoup de méthodes d'assistance car j'utilise SQL Server et Postgres, que Postgres renvoie un entier pour le fonction équivalente ..
Pourquoi ne SCOPE_IDENTITY()
renvoie- t-il pas simplement un entier brut? Existe-t-il des personnes qui utilisent couramment des valeurs décimales / non d'identité pour les clés primaires?
SCOPE_IDENTITY
la valeur de retour de la fonction est décimale (38,0)Ne pouvez-vous pas simplement le lancer avant de le renvoyer à partir de votre requête ou de votre proc stocké (les SP retournent toujours int de toute façon, mais vous utilisez peut-être un paramètre de sortie)?
Comme
SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
Et pourquoi fait-il cela? Probablement pour être plus flexible et gérer des nombres plus importants.
la source
SCOPE_IDENTITY
est une fonction intégrée .. donc, en faisant commeExecuteScalar('insert...; select scope_identity());
ça, il retournera un décimal de cette fonction plutôt que le entier attendu.La valeur de retour d' identité d'étendue est décimale (38,0)
CAST, utilisez la clause OUTPUT ou affectez-le à un paramètre de sortie plutôt qu'au
SELECT SCOPE_IDENTITY()
clientla source
int
maisSCOPE_IDENTITY()
pour une raison quelconque renvoieSystem.Decimal
... LaOUTPUT
clause renvoie un entier comme prévu, alors merci!essayez d'utiliser ceci et vous obtiendrez un entier:
la source