Dynamic SELECT TOP @var ใน SQL Server


308

ฉันจะให้ตัวแปรแบบไดนามิกตั้งค่าจำนวนแถวที่จะส่งคืนใน SQL Server ได้อย่างไร ด้านล่างนี้เป็นไวยากรณ์ที่ไม่ถูกต้องใน SQL Server 2005+:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2
คุณใช้ SQL 2005 หรือ 2008 อยู่หรือไม่
Brian Kim

ใช้ SQL Server 2005 ในปัจจุบัน
eddiegroves

คำตอบ:


561
SELECT TOP (@count) * FROM SomeTable

สิ่งนี้จะทำงานกับ SQL 2005+ เท่านั้น


52
ฉันมักจะลืมวงเล็บด้วย
John Sheehan

14
มันยอดเยี่ยมมาก! ตลอดเวลาที่ฉันคิดว่าฉันต้องใช้ไดนามิก sql
Laguna

1
มีใครอีกบ้างที่นี่ที่จะตระหนักถึงความผิดพลาดโง่ ๆ ในการค้นหาโดยไม่เพิ่มวงเล็บ
Raghav

คุณบันทึกวันของฉัน! ฉันคิดว่าจะย้ายทั้งหมดไปยังแบบสอบถามแบบไดนามิกเฉพาะสำหรับเรื่องนี้!
Altaf Patel

41

ไวยากรณ์ "select top (@var) ... " ใช้งานได้กับ SQL SERVER 2005+ เท่านั้น สำหรับ SQL 2000 คุณสามารถ:

set rowcount @top

select * from sometable

set rowcount 0 

หวังว่านี่จะช่วยได้

Oisin

(แก้ไขเพื่อแทนที่ @@ rowcount ด้วย rowcount - ขอบคุณ augustlights)


1
ฉันได้ยินมาว่าเป็นไปได้ที่จะได้รับหมายเลขแถวที่ไม่ถูกต้องด้วย @@ RowCount หากคุณมีคีย์หลักแบบหลายคอลัมน์ มันเป็นเรื่องจริงเหรอ?
Brian Kim




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.