2009-08-14 9 views
43

私のSQL文でTOPの値をパラメータ化しようとしています。C#SQLパラメータとしてトップ

SELECT TOP @topparam * from table1 

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

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

答えて

64

SQL Server 2005 and aboveでは、この操作を行うことができます。

SELECT TOP (@topparam) * from table1 
+0

これは私の答えにつながった。私はvarcharとして値を渡していて、intに切り替えて固定しました。皆さんありがとう。 – muhan

+0

これはまさに私が探していたものです、ありがとう! – ActionOwl

+0

@topparamにTOPを無視してすべての行を返すという値に設定する方法はありますか? –

0

あなたはインラインクエリを書くことができます:

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

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

8

あなたはこのコードは、例えば2005/8では正常に動作少なくともSQL Server 2005ので持っている必要があります...

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 
関連する問題