私のsqlステートメントでTOPの値をパラメーター化しようとしています。
SELECT TOP @topparam * from table1
command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString();
これはうまくいかないようです。誰か提案がありますか?
明確にするために、ストアドプロシージャは使用したくありません。
SQL Server 2005以降 では、次のことができます。
SELECT TOP (@topparam) * from table1
少なくともSQLServer 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インジェクション攻撃を防ぐことができます。