型付きTableAdaptersを使用するときに返される行数を制限する最良の方法を知っている人はいますか?オプションは次のように見えます:
- 「topX」をパラメーターとして渡します(SQLS2008を使用するまでこれを行うことはできません)
- 動的SQLステートメントを発行します
set rowcount X
。tableadapterメソッドを呼び出す前に、その後にset rowcount 0
実行します。 - 私が考えていなかった他の何か:)。
よろしくお願いします。
型付きTableAdaptersを使用するときに返される行数を制限する最良の方法を知っている人はいますか?オプションは次のように見えます:
set rowcount X
。tableadapterメソッドを呼び出す前に、その後にset rowcount 0
実行します。よろしくお願いします。
TOP nを使用できますが、次のように角かっこを付ける必要があります。
SELECT TOP (100) * FROM ...
次のようにパラメータ化することもできます。
DECLARE @count INT
SET @count = 100
SELECT TOP (@count) * FROM field_company
これは私にとってはうまくいきます。
SELECT DISTINCT TOP (@count) FLD1, FLD2 FROM mytable WITH (nolock)
このパラメーターは、TableAdapter 内の他のパラメーターと共に生成されます。
私はより良い方法を見つけました。
「TOP」値をパラメータ化することはできませんが、「SET ROWCOUNT X」値をパラメータ化することはできます。
したがって、これは機能します:
create procedure test_SelectTopFromTable (@rowCount int) as
begin
set rowcount @rowCount
select * from table
set rowcount 0
end
exec test_SelectTopFromTable 100
set rowcount 0
ただし、ステートメントの実行を妨げる例外の発生に対処する必要があります。掘り続けます。
更新
私の上司はそれを機能させる方法を教えてくれました(そしてそれはとても簡単なので少し恥ずかしいです)が、自分で見つけたように見せるのではなく、彼に彼の答えを投稿してもらうつもりです. :)
これは、パラメーター化されたストアド プロシージャを使用して実現します。
プロシージャ dbo.spFoo を作成します @NoOfRows int = 200 なので @sql varchar(2000) を宣言します。 @sql = を選択 'select top' + Cast(@NoOfRows as varchar) + ' * FROM Foo' 実行者(@sql)