এসকিউএল সার্ভারে গতিশীল নির্বাচন শীর্ষ @var


308

আমি কীভাবে এসকিউএল সার্ভারে ফিরে আসার সারিগুলির পরিমাণ নির্ধারণ করে একটি গতিশীল পরিবর্তনশীল রাখতে পারি? নীচে এসকিউএল সার্ভার 2005+ তে বৈধ সিনট্যাক্স নয়:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2
আপনি এসকিউএল 2005 বা 2008 চালাচ্ছেন?
— ব্রায়ান কিম

বর্তমানে এসকিউএল সার্ভার 2005 চালাচ্ছেন
— এডিগ্রোভস

উত্তর:


561
SELECT TOP (@count) * FROM SomeTable

এটি কেবল এসকিউএল 2005+ এর সাথে কাজ করবে


52
আমি সবসময় প্রথম বন্ধনীও ভুলে যাই।
— জন শিহান

14
এটা অসাধারণ! এই সমস্ত সময় আমি ভেবেছিলাম আমাকে গতিশীল স্কয়ার ব্যবহার করতে হবে।
— লেগুনা

1
প্রথম বন্ধনীর যোগ না করে তাদের প্রশ্নের মধ্যে নির্বোধ ভুল বুঝতে এখানে আর কে আছেন?
— রাঘব

তুমি আমার দিন বাঁচিয়েছ! আমি কেবল এই জন্য গতিশীল কোয়েরিতে সমস্ত স্থানান্তরিত করতে ভেবেছি!
— আলতাফ প্যাটেল

41

সিনট্যাক্স "সিলেক্ট টপ (@var) ..." কেবলমাত্র এসকিউএল সার্ভার 2005+ এ কাজ করে। এসকিউএল 2000 এর জন্য, আপনি এটি করতে পারেন:

set rowcount @top

select * from sometable

set rowcount 0 

আশাকরি এটা সাহায্য করবে

Oisin।

(রাউকাউন্টের সাথে @@ রৌকমানের প্রতিস্থাপনে সম্পাদিত - ধন্যবাদ অগাস্টলাইটস)


1
আমি শুনেছি আপনার কাছে একাধিক-কলাম প্রাথমিক কী থাকলে @@ রউকাউন্টের সাথে ভুল সারি নম্বর পাওয়া সম্ভব। এটা কি সত্যি?
— ব্রায়ান কিম


4

ডায়নামিক এসকিউএল ব্যবহার করা এবং এক্সিকিউট কমান্ডের সাহায্যে এটি কার্যকর করাও সম্ভব:

declare @sql  nvarchar(200), @count int
set @count = 10
set @sql = N'select top ' + cast(@count as nvarchar(4)) + ' * from table'
exec (@sql)

8
তবে এই পদ্ধতির সাথে এসকিউএল ইনজেকশন আক্রমণ থেকে (খুব)
— সাবধান থাকুন

4

অথবা আপনি কেবল পরিবর্তনকে প্যারেনেসিসে রেখেছেন

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;

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