2009-08-14 21 views
43

嘗試在我的sql語句中參數化TOP的值。C#SQL Top作爲參數

SELECT TOP @topparam * from table1 

command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString(); 

這似乎並不奏效。任何人有任何建議?
只是爲了澄清,我不想使用存儲過程。

回答

64

SQL Server 2005 and above,你可以這樣做:

SELECT TOP (@topparam) * from table1 
+0

這使我回答了我的答案。我通過varchar傳遞值,切換到int修復它。謝謝大家。 – muhan 2009-08-14 01:00:45

+0

這正是我所期待的,謝謝! – ActionOwl 2011-02-09 15:29:32

+0

有沒有辦法將@topparam設置爲一個值,這意味着它忽略TOP並返回所有行? – 2017-10-04 15:09:20

0

你可以寫一聯查詢:

EXEC 'SELECT TOP' + @topparam + '* FROM ...'

解析它作爲一個int,這將防止SQL注入攻擊。

8

你需要有至少SQL Server 2005的這段代碼在2005/8例如正常工作......

DECLARE @iNum INT 
SET @iNum = 10 
SELECT TOP (@iNum) TableColumnID 
FROM TableName 

如果你有SQL Server 2000,試試這個...

CREATE PROCEDURE TopNRecords 
@intTop INTEGER 
AS 
SET ROWCOUNT @intTop 

SELECT * FROM SomeTable 

SET ROWCOUNT 0 
GO