Jadi saya memiliki tabel dengan kolom identitas sebagai kunci utama, jadi ini adalah bilangan bulat. Jadi, mengapa SCOPE_IDENTITY()
selalu mengembalikan nilai desimal daripada int ke aplikasi C # saya? Ini benar-benar menjengkelkan karena nilai desimal tidak akan secara implisit dikonversi menjadi bilangan bulat di C #, yang berarti saya sekarang harus menulis ulang banyak hal dan memiliki banyak metode pembantu karena saya menggunakan SQL Server dan Postgres, yang mana Postgres mengembalikan integer untuk fungsi yang setara ..
Mengapa SCOPE_IDENTITY()
tidak hanya mengembalikan bilangan bulat biasa? Apakah ada orang di luar sana yang biasanya menggunakan nilai desimal / non-identitas untuk kunci utama?
SCOPE_IDENTITY
nilai hasil fungsi adalah desimal (38,0)Tidak bisakah Anda memasukkannya sebelum mengembalikannya dari kueri atau menyimpan proc (SPs selalu mengembalikan int, tapi mungkin Anda menggunakan parameter keluaran)?
Suka
SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY
Dan mengapa ini terjadi? Mungkin lebih fleksibel dan menangani jumlah yang lebih besar.
sumber
SCOPE_IDENTITY
adalah fungsi bawaan .. jadi ketika melakukan sepertiExecuteScalar('insert...; select scope_identity());
itu akan mengembalikan desimal dari fungsi itu daripada int yang diharapkan.Nilai kembali identitas lingkup adalah desimal (38,0)
CAST, gunakan klausa OUTPUT, atau tetapkan ke parameter output daripada
SELECT SCOPE_IDENTITY()
ke kliensumber
int
tetapiSCOPE_IDENTITY()
untuk beberapa alasan mengembalikanSystem.Decimal
...OUTPUT
Klausa mengembalikan integer seperti yang diharapkan, jadi terima kasih!coba gunakan ini dan Anda akan mendapatkan integer kembali:
ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
sumber