Mam więc tabelę z kolumną tożsamości jako kluczem podstawowym, więc jest to liczba całkowita. Dlaczego więc SCOPE_IDENTITY()
zawsze zwraca wartość dziesiętną zamiast int do mojej aplikacji C #? Jest to naprawdę denerwujące, ponieważ wartości dziesiętne nie będą niejawnie konwertowane na liczby całkowite w C #, co oznacza, że muszę teraz przepisać kilka rzeczy i mieć wiele metod pomocniczych, ponieważ używam SQL Server i Postgres, które Postgres zwraca liczbę całkowitą dla równoważna funkcja ..
Dlaczego SCOPE_IDENTITY()
po prostu nie zwraca zwykłej liczby całkowitej? Czy są ludzie, którzy często używają wartości dziesiętnych / nieidentyfikujących dla kluczy głównych?
SCOPE_IDENTITY
wartość zwracana funkcji jest dziesiętna (38,0)Czy nie możesz go po prostu przesłać przed zwróceniem go z zapytania lub zapisanego procesu (SP i tak zawsze zwracają int, ale może używasz parametru wyjściowego)?
Lubić
SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
A dlaczego to robi? Prawdopodobnie jest bardziej elastyczny i obsługuje większe liczby.
źródło
SCOPE_IDENTITY
jest funkcją wbudowaną ... więc gdy robiszExecuteScalar('insert...; select scope_identity());
to, zwróci wartość dziesiętną z tej funkcji, a nie oczekiwaną liczbę int.Wartość zwracana tożsamości zakresu jest dziesiętna (38,0)
CAST, użyj klauzuli OUTPUT lub przypisz do parametru wyjściowego zamiast
SELECT SCOPE_IDENTITY()
do klientaźródło
int
aleSCOPE_IDENTITY()
z jakiegoś powodu zwracaSystem.Decimal
...OUTPUT
Klauzula zwraca liczbę całkowitą zgodnie z oczekiwaniami, więc dzięki!spróbuj tego użyć, a otrzymasz z powrotem liczbę całkowitą:
ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
źródło