কেন SCOPE_IDENTITY () পূর্ণসংখ্যার পরিবর্তে দশমিক ফেরত দেয়?


90

সুতরাং আমার কাছে প্রাথমিক কী হিসাবে একটি পরিচয় কলাম সহ একটি টেবিল রয়েছে, সুতরাং এটি একটি পূর্ণসংখ্যা। সুতরাং, কেন SCOPE_IDENTITY()সর্বদা আমার সি # অ্যাপ্লিকেশনটির পরিবর্তে সর্বদা দশমিক মান ফেরত দেয় ? এটি সত্যই বিরক্তিকর যেহেতু দশমিক মানগুলি স্পষ্টতই সি # তে পূর্ণসংখ্যায় রূপান্তরিত করবে না, যার অর্থ এখন আমাকে অনেকগুলি স্টাফ আবার লিখতে হবে এবং অনেকগুলি সহায়ক পদ্ধতি থাকতে হবে কারণ আমি এসকিউএল সার্ভার এবং পোস্টগ্রিস ব্যবহার করি, যা পোস্টগ্রিসের জন্য একটি পূর্ণসংখ্যা ফেরত দেয় সমতুল্য ফাংশন ..

কেন SCOPE_IDENTITY()কেবল একটি সরল পূর্ণসংখ্যা ফেরত দেয় না? এমন কি এমন লোকেরা আছে যা প্রাথমিক কীগুলির জন্য সাধারণত দশমিক / অ-পরিচয় মান ব্যবহার করে?

উত্তর:


106

SQL সার্ভার সালে IDENTITYসম্পত্তি নির্ধারিত করা যেতে পারে tinyint, smallint, int, bigint, decimal(p, 0), অথবা numeric(p, 0)কলাম। কাজেই SCOPE_IDENTITYফাংশনটিতে এমন একটি ডেটা টাইপ ফিরতে হবে যা উপরের সমস্তটি অন্তর্ভুক্ত করতে পারে।

পূর্ববর্তী উত্তরগুলি যেমন বলেছে, এটি intফেরত দেওয়ার আগে এটি কেবল সার্ভারে ফেলে দিন, তারপরে ADO.NET আপনার প্রত্যাশা অনুযায়ী এটির ধরণটি সনাক্ত করবে।


4
SCOPE_IDENTITYফাংশন রিটার্ন মান দশমিক (
38,0

36

আপনার ক্যোয়ারী বা সঞ্চিত প্রোক থেকে এটি ফেরানোর আগে আপনি কেবল এটি কাস্ট করতে পারবেন না (এসপিরা যাইহোক যাইহোক প্রত্যাবর্তন করে, তবে সম্ভবত আপনি আউটপুট প্যারামিটার ব্যবহার করছেন)?

পছন্দ SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY

এবং কেন এটি করে? সম্ভবত আরও নমনীয় হতে এবং বৃহত সংখ্যা হ্যান্ডেল করার জন্য।


SCOPE_IDENTITYএটি একটি অন্তর্নির্মিত ফাংশন .. সুতরাং ExecuteScalar('insert...; select scope_identity());এটি করার সময় প্রত্যাশিত int এর চেয়ে সেই ফাংশন থেকে দশমিক ফিরে আসবে।
আর্লজ

@ ইয়ারলজ, সুতরাং এসকিউএলকে এক্সিকিউটিস্কেলারে পরিবর্তন করুন ('সন্নিবেশ করুন ...; সিএএসটি (স্কোপ_সংশ্লিষ্টতা () পূর্ববর্তী)') নির্বাচন করুন;
কেড রক্স

4

স্কোপ পরিচয় ফেরতের মান দশমিক (38,0)

এটি কাস্ট করুন, OUTPUT ধারাটি ব্যবহার করুন বা SELECT SCOPE_IDENTITY()ক্লায়েন্টের পরিবর্তে আউটপুট প্যারামিটার বরাদ্দ করুন


আমার ক্ষেত্রে কলামে ডেটা টাইপ রয়েছে intতবে SCOPE_IDENTITY()কোনও কারণে প্রত্যাবর্তন হয় System.Decimal... OUTPUTধারাটি প্রত্যাশার মতো একটি পূর্ণসংখ্যা ফেরত দেয়, তাই ধন্যবাদ!
এরিক বার্কে

3

এটি ব্যবহার করে দেখুন এবং আপনি একটি পূর্ণসংখ্যা ফিরে পাবেন:

ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.