2012-02-28 2 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. 
    } 

}