web-dev-qa-db-ja.com

パラメータとしてのC#SQLトップ

私のsqlステートメントでTOPの値をパラメーター化しようとしています。

SELECT TOP @topparam * from table1

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

これはうまくいかないようです。誰か提案がありますか?
明確にするために、ストアドプロシージャは使用したくありません。

48
muhan

SQL Server 2005以降 では、次のことができます。

SELECT TOP (@topparam) * from table1
75
Cade Roux

少なくとも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
8
JP Alioto

インラインクエリを作成できます。

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

それをintとして解析すると、SQLインジェクション攻撃を防ぐことができます。

0
Russell