2012-02-28 4 views
0

次のスクリプトをADO .NETから直接呼び出すことができるように変換できますか?私はそれがストアドプロシージャであることを望んでおらず、変換が容易ならばTotRowsは必要ありません。合計行なしのSQLレベルのページング

DECLARE @startRow INT ; SET @startrow = 50 
;WITH cols 
AS 
(
    SELECT table_name, column_name, 
     ROW_NUMBER() OVER(ORDER BY table_name, column_name) AS seq, 
     ROW_NUMBER() OVER(ORDER BY table_name DESC, column_name desc) AS totrows 
    FROM [INFORMATION_SCHEMA].columns 
) 
SELECT table_name, column_name, totrows + seq -1 as TotRows 
FROM cols 
WHERE seq BETWEEN @startRow AND @startRow + 49 
ORDER BY seq 
+0

なぜあなたはそれがストアドプロシージャである必要があると思いますか?あなたのクライアントは何を書いていますか? –

+0

私はC#(.NET 3.5)を使用しています。 – oshirowanen

答えて

1

C#のインラインSQLを使用するために必要なことは、ローカル変数の代わりにパラメータを使用することです。

using(SqlConnection cnn = GetAConnection()) 
{ 
    string sql = @"WITH cols 
     AS 
     (
     SELECT table_name, column_name, 
      ROW_NUMBER() OVER(ORDER BY table_name, column_name) AS seq, 
      ROW_NUMBER() OVER(ORDER BY table_name DESC, column_name desc) AS totrows 
     FROM [INFORMATION_SCHEMA].columns 
     ) 
     SELECT table_name, column_name, totrows + seq -1 as TotRows 
     FROM cols 
     WHERE seq BETWEEN @startRow AND @startRow + 49 
     ORDER BY seq"; 

    SqlCommand cmd = new SqlCommand(sql,cnn); 
    cmd.Parameters.AddWithValue("@startRow",50); 

    cnn.Open(); 
    using(SqlDataReader rdr = cmd.ExecuteReader()) 
    { 

     //Do something with the reader here. 
    } 

}