私のSQL文でTOPの値をパラメータ化しようとしています。C#SQLパラメータとしてトップ
SELECT TOP @topparam * from table1
command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString();
これは機能していないようです。誰でも何か提案がありますか?
明確にするために、私はストアドプロシージャを使用したくありません。
私のSQL文でTOPの値をパラメータ化しようとしています。C#SQLパラメータとしてトップ
SELECT TOP @topparam * from table1
command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString();
これは機能していないようです。誰でも何か提案がありますか?
明確にするために、私はストアドプロシージャを使用したくありません。
SQL Server 2005 and aboveでは、この操作を行うことができます。
SELECT TOP (@topparam) * from table1
あなたはインラインクエリを書くことができます:
EXECは+ @topparam + 'TOP SELECT' 'を* FROM ...'
をintとしてそれを解析し、それがSQLインジェクション攻撃を防ぐことができます。
あなたはこのコードは、例えば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
これは私の答えにつながった。私はvarcharとして値を渡していて、intに切り替えて固定しました。皆さんありがとう。 – muhan
これはまさに私が探していたものです、ありがとう! – ActionOwl
@topparamにTOPを無視してすべての行を返すという値に設定する方法はありますか? –