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

}