এসকিউএল সার্ভারে গতিশীল নির্বাচন শীর্ষ @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.