2009-08-14 11 views
43

Versuchen, den Wert von TOP in meiner SQL-Anweisung zu parametrisieren.C# SQL Top als Parameter

SELECT TOP @topparam * from table1 

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

Dies scheint nicht zu funktionieren. Hat jemand irgendwelche Vorschläge?
Nur um zu verdeutlichen, möchte ich keine gespeicherten Prozeduren verwenden.

Antwort

64

In SQL Server 2005 and above, können Sie dies tun:

SELECT TOP (@topparam) * from table1 
+0

Dies führte mich zu meiner Antwort. Ich übergab Wert als varchar und wechselte zu int es behoben. Danke allen. – muhan

+0

Genau das habe ich gesucht, danke! – ActionOwl

+0

Gibt es eine Möglichkeit, @topparam auf einen Wert festzulegen, der bedeutet, dass TOP ignoriert wird und alle Zeilen zurückgegeben werden? –

0

Sie könnten eine Inline-Abfrage schreiben:

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

es als int Parse, und das wird eine SQL-Injection-Angriff verhindern.

8

Sie müssen mindestens SQL Server haben 2005. Dieser Code in 2005/8 zum Beispiel funktioniert gut ...

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

Wenn Sie haben SQL Server 2000, versuchen Sie es ...

CREATE PROCEDURE TopNRecords 
@intTop INTEGER 
AS 
SET ROWCOUNT @intTop 

SELECT * FROM SomeTable 

SET ROWCOUNT 0 
GO