2012-02-28 72 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

你爲什麼認爲需要一個存儲過程?你的客戶寫了什麼? – 2012-02-28 15:24:51

+0

我正在使用C#(.NET 3.5) – oshirowanen 2012-02-28 15:33:21

回答

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. 
    } 

}