Portanto, tenho uma tabela com uma coluna de identidade como chave primária, portanto, é um número inteiro. Então, por que SCOPE_IDENTITY()
sempre retorna um valor decimal em vez de um int para meu aplicativo C #? Isso é realmente irritante, pois os valores decimais não serão convertidos implicitamente em inteiros em C #, o que significa que agora tenho que reescrever um monte de coisas e tenho muitos métodos auxiliares porque uso o SQL Server e o Postgres, que o Postgres retorna um inteiro para o função equivalente ..
Por que SCOPE_IDENTITY()
não retorna apenas um inteiro simples? Existem pessoas por aí que normalmente usam valores decimais / sem identidade para chaves primárias?
SCOPE_IDENTITY
o valor de retorno da função é decimal (38,0)Você não pode simplesmente lançá-lo antes de retorná-lo de sua consulta ou procedimento armazenado (SPs sempre retornam int de qualquer maneira, mas talvez você esteja usando um parâmetro de saída)?
Gostar
SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
E por que isso? Provavelmente para ser mais flexível e lidar com números maiores.
fonte
SCOPE_IDENTITY
é uma função incorporada .. então, ao fazerExecuteScalar('insert...; select scope_identity());
isso, ela retornará um decimal daquela função ao invés do int esperado.O valor de retorno da identidade do escopo é decimal (38,0)
CAST, use a cláusula OUTPUT ou atribua a um parâmetro de saída em vez de
SELECT SCOPE_IDENTITY()
ao clientefonte
int
masSCOPE_IDENTITY()
por algum motivo retornaSystem.Decimal
... AOUTPUT
cláusula retorna um inteiro conforme o esperado, então obrigado!tente usar isso e você receberá um número inteiro de volta:
fonte