Ответ 1
В SQL Server 2005 и выше вы можете сделать это:
SELECT TOP (@topparam) * from table1
Попытка параметризовать значение TOP в моей инструкции sql.
SELECT TOP @topparam * from table1
command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString();
Это не работает. У кого-нибудь есть предложения?
Чтобы уточнить, я не хочу использовать хранимые процедуры.
В SQL Server 2005 и выше вы можете сделать это:
SELECT TOP (@topparam) * from table1
У вас должен быть хотя бы 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
Вы можете написать встроенный запрос:
EXEC 'SELECT TOP' + @topparam + '* FROM...'
Проанализируйте его как int, и это предотвратит атаку SQL-инъекций.