2009-08-14 16 views
43

Provare a parametrizzare il valore di TOP nella mia istruzione sql.C# SQL Come parametro

SELECT TOP @topparam * from table1 

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

Questo non sembra funzionare. Qualcuno ha dei suggerimenti?
Giusto per chiarire, non voglio usare stored procedure.

risposta

64

In SQL Server 2005 and above, si può fare questo:

SELECT TOP (@topparam) * from table1 
+0

Questo mi ha portato alla mia risposta. Stavo passando il valore in varchar, passando a int lo fisso. Ringrazia tutti. – muhan

+0

Questo è esattamente quello che stavo cercando, grazie! – ActionOwl

+0

C'è un modo per impostare @topparam su un valore che significa che ignora il TOP e restituisce tutte le righe? –

0

Si potrebbe scrivere una query in linea:

EXEC 'di selezionare Home' + @topparam + '* FROM ...'

analizzare come un int e che impedirà un attacco di SQL injection.

8

È necessario disporre di almeno SQL Server 2005. Questo codice funziona bene in 2005/8 per esempio ...

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

Se avete SQL Server 2000, provatelo ...

CREATE PROCEDURE TopNRecords 
@intTop INTEGER 
AS 
SET ROWCOUNT @intTop 

SELECT * FROM SomeTable 

SET ROWCOUNT 0 
GO