এমন একটি মান আছে যা আমি একটি নির্বাচন শীর্ষে ব্যবহার করতে পারি যা সমস্ত সারি ফেরত দেবে?


13

আমি শেষ ব্যবহারকারীকে কোনও ক্যোয়ারী (নির্বাচন শীর্ষ (@ এক্স)) দ্বারা কতগুলি সারি ফিরিয়ে দেওয়া হয়েছে তা নির্ধারণ করার অনুমতি দিচ্ছি। এমন কোনও মান আছে যা প্রবেশ করানো যায় যেখানে সমস্ত সারি ফিরে আসে? বা তারা কী সমস্ত সারণী ফিরিয়ে দিতে চাইলে শীর্ষ (@ x) ছাড়াই আমাকে গতিশীলভাবে ক্যোরি তৈরি করতে হবে?

আমি এসকিউএল সার্ভার 2012 ব্যবহার করছি।


এটা TOP ... ORDER BYকিছু? আপনি যে ORDER BYসমস্তটি নির্বাচন করেছেন সে ক্ষেত্রে এখনও প্রয়োজনীয় কিছু কি দরকার?
মার্টিন স্মিথ

1
আমার মনে হচ্ছে আহ্ ... শুধু বাদ দেওয়া TOPকি প্রশ্ন থেকে বেরিয়ে গেছে? আপনি কিছু পূর্বনির্ধারিত ক্যোয়ারির সাথে কাজ করছেন এবং আপনাকে এটি কিছু দিতে হবে ?
করসিকা

উত্তর:


17

ভাল, দেখে মনে হচ্ছে যে শীর্ষস্থানীয় একটি বিগিন্ট আপনি যদি PERCENT ব্যবহার না করেন । এর অর্থ আপনি বিগিন্টের সর্বাধিক মানতে পার করতে পারেন ,

SELECT TOP (9223372036854775807) * FROM table1

আমি গুরুতরভাবে সন্দেহ করি যে আপনি কখনও একটি বড় টেবিল দেখতে পাবেন। যদিও ক্যোয়ারী পরিকল্পনায় কী ধরনের প্রভাব ফেলবে তা আমি নিশ্চিত নই।


7
ভেরিয়েবলটি @xএকটি বিগিন্ট হিসাবে ধরে নেওয়া যায় তবে কারও কারও SET @x = 0x7fffffffffffffffকাছে পরিষ্কার হতে পারে। যাইহোক এটি মনে রাখা সহজ।
মার্টিন স্মিথ

@ মার্টিনস্মিথ আমি সত্যবাদী হবো আমি যেভাবেই এটি সন্ধান করতে যাব :) আমি এর আগে এমনটি কখনও দেখিনি। এটি কি অন্তর্নিহিত রূপান্তর?
কেনেথ ফিশার

7
ঠিক আছে এটি মনে রাখা আরও সহজ যে আপনি যদি কেবলমাত্র শুরু করে মনে করেন 7এবং তারপরে বাকীটি থাকে Fএবং আপনার মোট 8 টি বাইটের জন্য 16 টি অক্ষর প্রয়োজন। এবং হ্যাঁ এই ডেটাটাইপের কোনও ভেরিয়েবলকে অ্যাসাইন করা হলে তা স্পষ্টভাবে রূপান্তরিত হবে।
মার্টিন স্মিথ

@ মার্টিনস্মিথ মানটির বাইনারি উপস্থাপনার উপর নির্ভর করা কি ভাল অভ্যাস? ডকুমেন্টেশন যুক্তরাষ্ট্রের একটি মান বাইনারি উপস্থাপনা এসকিউএল সার্ভার এর সংস্করণে সংস্করণ থেকে পরিবর্তন করতে পারে । এছাড়াও, আমি জানি না আমি একমাত্র ব্যক্তি, যিনি সর্বদা স্কেল সার্ভারের 0x7fffffffffffffffসর্বোচ্চ মানের প্রতিনিধিত্ব করে বিভ্রান্ত হয়ে পড়েছিলেন bigint। কারণ SqlServer বাইনারি ধ্রুবক স্বরলিপি আপনি আছেন যে 7fমধ্যে সর্বনিম্ন বাইট, গ মত ভাষায় ++ -এর আপনি এটা আছে যেখানে সর্বোচ্চ বাইট স্বাক্ষরিত অবিচ্ছেদ্য ধরনের সর্বোচ্চ জন্য।
i-one

3
@ ই-এক। পূর্ণসংখ্যার ধরণের বাইনারি প্রতিনিধিত্বের পরিবর্তনের সম্ভাবনা খুব বেশি। এসকিউএল সার্ভার বিটওয়াইস অপারেটর সরবরাহকারী বিটওয়াইস অপারেটরদের সরবরাহ করার কোনও অর্থ হবে না যদি এটি প্রত্যাশিত না হত যে আমরা একটি নির্দিষ্ট বিন্যাসে নির্ভর করতে পারি।
মার্টিন স্মিথ

12

আপনি বিবেচনা করতে পারে

SET ROWCOUNT @x;

SELECT Foo
FROM Bar
ORDER BY Baz;

পরিবর্তে

SELECT TOP (@x) Foo
FROM Bar 
ORDER BY Baz;

0আপনার নিষ্ক্রিয় করতে @ x সেট করতে যে মানটি লাগবে তা হ'ল ।

এটি ডেটা পরিবর্তনের বিবৃতিগুলির জন্য অবচিত করা হয়েছে তবে এর জন্য অবনমিত নয় SELECT

২০১২ সালে একটি ভিন্ন পরিকল্পনা কেসটির জন্য ROWCOUNT0 বনাম কিছু শূন্য মানের জন্য সংকলিত হয়।

তাহলে ORDER BY Bazঅর্থ দিতে শুধুমাত্র আছে TOPবদলে ফলাফলের জন্য একটি উপস্থাপনা প্রদান করার এবং আপনি একটি সূচক দুই প্রশ্নের মধ্যে এই তারপর বিভাজন সমর্থন একটি অপ্রয়োজনীয় সাজানোর এড়াতে হবে না 0কেস।


8

কোনও প্রশ্নের মধ্যে "শীর্ষ" ব্যবহার করে যে কোনও ত্রুটি বাইপাস করতে শীর্ষ 100 পার্সেন্ট নির্বাচন করুন।


1
আমার কাছে, এটি এমন কোনও বৈশিষ্ট্যটি অপ্টিমাইজড হয়ে যাওয়ার জন্য ব্যবহার করার কারণটি সত্যিই ব্যাখ্যা করে না। ক্রিস্টাল প্রতিবেদনগুলি দেখার সংজ্ঞাটিতে কোনও অর্ডার থাকার আশা করে ?
অ্যান্ড্রি এম

না, ক্রিস্টাল রিপোর্টগুলির কাছে প্রশ্নগুলি ধরে রাখা এবং তাদের উপর তার নিজস্ব প্রয়োগের পরিকল্পনা জোর করা নিয়ে সমস্যা রয়েছে, এগুলি খুব অদক্ষ এবং কখনও কখনও ভুল করে তোলে। আমি এসকিউএল কোয়েরিতে আমার সমস্ত যুক্তি এবং নকশা করতে পছন্দ করি এবং কেবল এটি ক্রিস্টালটিতে "সুন্দর" করে তুলি। এ কারণেই আমি বেশিরভাগ ক্ষেত্রে এসএসআইএস / এসএসআরএসে স্থানান্তরিত হয়েছি, তবে এখনও সেখানে উত্তরাধিকার সংক্রান্ত প্রতিবেদন রয়েছে।
MguerraTorres

-2
select top(SELECT COUNT(*) FROM YourTable) * From YourTable

1
প্রশ্নটি টপ ক্লজটি প্যারামিট্রিসিং সম্পর্কে । ওপিতে ইতিমধ্যে @xসেখানে একটি প্যারামিটার রয়েছে (এবং ) এখন তারা কোন মানটি পাস করতে হবে তা জিজ্ঞাসা করছে @xযাতে সারণীতে কতগুলি সারি রয়েছে তা নির্বিশেষে এটি "সমস্ত সারি" বোঝায়। ওপি'র প্রয়োজনীয়তার সাথে মেলে আপনার সমাধানটি কীভাবে গ্রহণ করতে হয় তা আপনি বুঝতে পারেন।
অ্যান্ড্রি এম

1
আমি প্রশ্নের সাথে মানিয়ে নিতে সামঞ্জস্য করেছি যদিও লিখিতভাবে এটির একটি রেসের শর্ত রয়েছে যদি সারিগুলি একই সাথে সন্নিবেশ করা হয়। সমবর্তী সন্নিবেশগুলিকে ব্লক করে এমন সময়কালটির জন্য এটির জন্য একটি টেবিল লক লাগবে। এই এবং প্রথম স্থানে চেক করার অতিরিক্ত ব্যয়টি কেবলমাত্র একটি বিশাল সংখ্যক ব্যবহার করে এড়ানো যায়।
মার্টিন স্মিথ

(SELECT COUNT(*) FROM YourTable)একটি মান হয় না।
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.