2009-08-14 12 views
43

Intentando parametrizar el valor de TOP en mi instrucción sql.C# SQL Arriba como parámetro

SELECT TOP @topparam * from table1 

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

Esto no parece funcionar. ¿Alguien tiene alguna sugerencia?
Solo para aclarar, no quiero usar procedimientos almacenados.

Respuesta

64

En SQL Server 2005 and above, usted puede hacer esto:

SELECT TOP (@topparam) * from table1 
+0

Esto me llevó a mi respuesta. Estaba pasando el valor en varchar, cambiando a int lo arregló. Gracias a todos. – muhan

+0

Esto es exactamente lo que estaba buscando, ¡gracias! – ActionOwl

+0

¿Hay alguna manera de establecer @topparam en un valor que significa que ignora el TOP y devuelve todas las filas? –

0

Se puede escribir una consulta en línea:

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

analizarlo como un int y que va a prevenir un ataque de inyección SQL.

8

Es necesario tener al menos SQL Server 2005. Este código funciona bien en 2005/8 por ejemplo ...

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

Si tiene SQL Server 2000, pruébelo ...

CREATE PROCEDURE TopNRecords 
@intTop INTEGER 
AS 
SET ROWCOUNT @intTop 

SELECT * FROM SomeTable 

SET ROWCOUNT 0 
GO