Ich habe also eine Tabelle mit einer Identitätsspalte als Primärschlüssel, also ist es eine Ganzzahl. Warum gibt SCOPE_IDENTITY()
meine C # -Anwendung immer einen Dezimalwert anstelle eines int zurück? Dies ist sehr ärgerlich, da Dezimalwerte in C # nicht implizit in Ganzzahlen konvertiert werden. Dies bedeutet, dass ich jetzt eine Reihe von Dingen neu schreiben und viele Hilfsmethoden verwenden muss, da ich SQL Server und Postgres verwende, für die Postgres eine Ganzzahl zurückgibt äquivalente Funktion ..
Warum wird SCOPE_IDENTITY()
nicht einfach eine einfache Ganzzahl zurückgegeben? Gibt es Leute da draußen, die üblicherweise Dezimal- / Nichtidentitätswerte für Primärschlüssel verwenden?
SCOPE_IDENTITY
Funktionsrückgabewert ist dezimal (38,0)Können Sie es nicht einfach umwandeln, bevor Sie es von Ihrer Abfrage oder Ihrem gespeicherten Prozess zurückgeben (SPs geben trotzdem immer int zurück, aber vielleicht verwenden Sie einen Ausgabeparameter)?
Mögen
SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
Und warum macht es das? Wahrscheinlich, um flexibler zu sein und mit größeren Zahlen umzugehen.
quelle
SCOPE_IDENTITY
ist eine eingebaute Funktion. WennExecuteScalar('insert...; select scope_identity());
Sie also so vorgehen , wird von dieser Funktion eine Dezimalstelle anstelle des erwarteten int zurückgegeben.Der Rückgabewert für die Bereichsidentität ist dezimal (38,0).
CAST it, verwenden Sie die OUTPUT-Klausel oder weisen Sie einen Ausgabeparameter anstelle
SELECT SCOPE_IDENTITY()
des Clients zuquelle
int
aberSCOPE_IDENTITY()
aus irgendeinem Grund zurückSystem.Decimal
... DieOUTPUT
Klausel gibt wie erwartet eine Ganzzahl zurück, also danke!Wenn Sie dies verwenden, erhalten Sie eine Ganzzahl zurück:
quelle