C # SQL Top como parámetro


Tratando de parametrizar el valor de TOP en mi sentencia sql.

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.

Author: Tim Schmelter, 2009-08-14

3 answers

En SQL Server 2005 y superior , puede hacer esto:

SELECT TOP (@topparam) * from table1
 65
Author: Cade Roux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-14 00:19:38

Necesita 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, pruebe esto ...

CREATE PROCEDURE TopNRecords
@intTop INTEGER
AS
SET ROWCOUNT @intTop

SELECT * FROM SomeTable

SET ROWCOUNT 0
GO
 8
Author: JP Alioto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-14 00:20:34

Podría escribir una consulta en línea:

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

Analícelo como un int y eso evitará un ataque de inyección SQL.

 0
Author: Russell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-14 00:18:01