Dapper.NET使用入门(四)【用Dapper数据访问层封装】

来源:互联网 发布:java全栈开发工程师 编辑:程序博客网 时间:2024/04/19 08:25

每天都是一个起点,每天都有一点进步,每天都有一点收获!

Program.cs主程序:

 internal class Program    {        private static void Main(string[] args)        {            InitSqlMaker.InitSqlMakerO();            //构建查询语句之一(全连接)            SelectSqlMaker selectSqlMaker=new SelectSqlMaker();            selectSqlMaker.FullJoinSelectTest();            //构建删除语句之一(条件删除)            DeleteSqlMaker.WhereDeleteTest();            CustomerBLL bll=new CustomerBLL();            List<Customer> list=bll.GetBy().ToList();            Console.WriteLine(list.Count+"条记录:"+list[0].Name + "---" + list[0].Address);            List<Customer> listmuch = bll.GetCustomersBystorage().ToList();            Console.WriteLine(listmuch.Count + "条记录!" );            Console.ReadKey();        }    }

表现

 public static class Performance    {        public static void SetUp()        {            QueryMaker.DbScheme = "dbo";        }        public static void FullSelectForCustomerTime()        {            int cnt = 1000000;            string sql = null;            var stopwatch = System.Diagnostics.Stopwatch.StartNew();            for (int i = 0; i < cnt; i++)            {                sql = QueryMaker.New()                    .SELECT()                    .Col("Id", "Id")                    .Col("Name", "Name")                    .Col("Description", "Desc")                    .Col("Address", "Addr")                    .Col("Zip", "Zip")                    .Col("Balance", "Balance")                    .Col("Registered", "Reg")                    .FROM().Tab("Customer")                    .WHERE("Zip = @zip")                    .ORDERBY("Name", SortAs.Asc)                    .RawSql();            }            stopwatch.Stop();            //var example = "SELECT\n\tId AS Id\n\t, Name AS Name"  + "\n\t, Description AS Desc\n\t, Address AS Addr\n\t, Zip AS Zip"  + "\n\t, Balance AS Balance\n\t, Registered AS Reg" + "\nFROM\n\t[dbo].[Customer]"  + "\nWHERE\n\tZip = @zip\nORDER BY Name ASC;";                      System.Diagnostics.Trace.WriteLine(stopwatch.Elapsed.TotalMilliseconds.ToString("Total 0.00 ms"));            System.Diagnostics.Trace.WriteLine( ((double) (stopwatch.Elapsed.TotalMilliseconds*1000)/cnt).ToString("0.00 us per one query"));        }    }

初始化语句构建器

 public static class InitSqlMaker    {        public static void InitSqlMakerO()        {            var current = QueryMaker.Current;            Console.WriteLine("current ISqlMaker:" + (current is ISqlMaker));            var maker = QueryMaker.New();            Console.WriteLine("maker ISqlMaker:" + (maker is ISqlMaker));            Console.WriteLine("maker ISqlFirst:" + (maker is ISqlFirst));            Console.WriteLine("maker.Equals(current):" + (maker.Equals(current)));        }        public static void MakeEmptyQuery()        {            var newQuery = QueryMaker.Current;            try            {                newQuery.RawSql();            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);            }        }    }

Select语句构建

 public  class SelectSqlMaker    {        private string _dbScheme;        public void SetUp()        {            _dbScheme = "dbo"; // 默认MSSQL 架构         }        public void InitSelectDistinctTest()        {            var maker = QueryMaker.New(_dbScheme) .SelectDistinct("Name, Description, Address");            var sql = maker.RawSql();            // var example = "SELECT DISTINCT\n\tName\n\t, Description\n\t, Address;";        }        public void SelectUnionTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .UNION();            var sql = maker.RawSql();            var example = "SELECT\nUNION\nSELECT;";            maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id")                .UNION(IsALL: true)                .Col("Id");            sql = maker.RawSql();            example = "SELECT\n\tId\nUNION ALL\nSELECT\n\tId;";        }        public void InitSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT("Name, t.Description, t.Address AS adr");            var sql = maker.RawSql();            //var example = "SELECT\n\tName\n\t, t.Description\n\t, t.Address AS adr;";        }        public void AddColSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT("Id")                .Col("Name")                .Col("Description", "Desc")                .Col("t.Address", "Addr");            var sql = maker.RawSql();            //var example = "SELECT\n\tId\n\t, Name\n\t, Description AS Desc\n\t, t.Address AS Addr;";        }        public void FromSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT("Id")                .Col("Name")                .Col("Description", "Desc")                .Col("t.Address", "Addr")                .FROM("table, dbo.table, [dbo].[Customer] cst");            var sql = maker.RawSql();            //var example = "SELECT\n\tId\n\t, Name\n\t, Description AS Desc\n\t, t.Address AS Addr\nFROM"  + "\n\ttable\n\t, dbo.table\n\t, [dbo].[Customer] cst;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void EmptySchemeSelectTest()        {            var maker = QueryMaker.New()                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer");            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[Customer];";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void AddTableSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Table")                .Tab("Table", "Tab")                .Tab("Table", "Tab", "tbl");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Table]\n\t, [dbo].[Table] AS Tab\n\t, [tbl].[Table] AS Tab;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void WhereSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .WHERE("Zip = @zip AND Id >= @id");            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip AND Id >= @id;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void WhereAndSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .WHERE("Zip = @zip")                .WhereAnd("Id >= @id");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM"  + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip\n\tAND Id >= @id;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void WhereOrSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .WHERE("Zip = @zip")                .WhereOr("Id >= @id");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nWHERE\n\tZip = @zip\n\tOR Id >= @id;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void JoinSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .JOIN("Address", "addr");            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nINNER JOIN [dbo].[Address] AS addr;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void LeftJoinSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .LeftJoin("Address", "addr");            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nLEFT JOIN [dbo].[Address] AS addr;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void RightJoinSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .RightJoin("Address", "addr");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nRIGHT JOIN [dbo].[Address] AS addr;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void FullJoinSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .FullJoin("Address", "addr");            var sql = maker.RawSql();            Console.WriteLine(sql);            Console.WriteLine("-------------------------------------------------------");            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nFULL JOIN [dbo].[Address] AS addr;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void OnJoinSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer", "cst")                .JOIN("Address", "addr")                .ON("cst.Id = addr.Id");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM"  + "\n\t[dbo].[Customer] AS cst" + "\nINNER JOIN [dbo].[Address] AS addr" + "\n\tON cst.Id = addr.Id;";        }        public void OnAndJoinSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer", "cst")                .JOIN("Address", "addr")                .ON("cst.Id = addr.Id")                .OnAnd("cst.Col = addr.Col");            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM"                          + "\n\t[dbo].[Customer] AS cst"                          + "\nINNER JOIN [dbo].[Address] AS addr"                          + "\n\tON cst.Id = addr.Id"                          + "\n\tAND cst.Col = addr.Col;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void OnOrJoinSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer", "cst")                .JOIN("Address", "addr")                .ON("cst.Id = addr.Id")                .OnOr("cst.Col = addr.Col");            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM"                          + "\n\t[dbo].[Customer] AS cst"                          + "\nINNER JOIN [dbo].[Address] AS addr"                          + "\n\tON cst.Id = addr.Id"                          + "\n\tOR cst.Col = addr.Col;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void OrderBySelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer", "cst")                .ORDERBY("Id", SortAs.Desc);            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nORDER BY Id DESC;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void OrderThenSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer", "cst")                .ORDERBY("Id", SortAs.Desc)                .OrderThen("Zip", SortAs.Asc);            var sql = maker.RawSql();            var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nORDER BY Id DESC, Zip ASC;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void GroupBySelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer", "cst")                .GROUPBY("Id");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer] AS cst" + "\nGROUP BY Id;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void GroupThenSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer", "cst")                .GROUPBY("Id")                .GroupThen("Zip");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM"  + "\n\t[dbo].[Customer] AS cst" + "\nGROUP BY Id, Zip;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void HavingSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .GROUPBY("Zip")                .HAVING("COUNT(Id) >= @id");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip"  + "\nHAVING COUNT(Id) >= @id;";        }        public void HavingAndSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .GROUPBY("Zip")                .HAVING("COUNT(Id) >= @id")                .HavingAnd("MIN(Zip) = @zip");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip"  + "\nHAVING COUNT(Id) >= @id\n\tAND MIN(Zip) = @zip;";        }        public void HavingOrSelectTest()        {            var maker = QueryMaker.New(_dbScheme)                .SELECT()                .Col("Id", "Id")                .FROM()                .Tab("Customer")                .GROUPBY("Zip")                .HAVING("COUNT(Id) >= @id")                .HavingOr("MIN(Zip) = @zip");            var sql = maker.RawSql();            //var example = "SELECT\n\tId AS Id\nFROM" + "\n\t[dbo].[Customer]\nGROUP BY Zip" + "\nHAVING COUNT(Id) >= @id\n\tOR MIN(Zip) = @zip;";        }    }

Insert语句构建

 public static class InsertSqlMaker    {        private static string _dbScheme;        public static void SetUp()        {            _dbScheme = "dbo"; // 默认MSSQL 架构         }        public static void InitInsert()        {            var maker = QueryMaker.New(_dbScheme).INSERT("Customer");            var sql = maker.RawSql();            //var example = "INSERT INTO [dbo].[Customer]";        }        public static void AddColumnTest()        {            var maker = QueryMaker.New(_dbScheme)                .INSERT("Customer")                .Col("Name")                .Col("Description")                .Col("Address");            var sql = maker.RawSql();            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t)";        }        public static void ValuesTest()        {            var maker = QueryMaker.New(_dbScheme)                .INSERT("Customer")                .Col("Name")                .Col("Description")                .Col("Address")                .VALUES("@name, @description, @address");            var sql = maker.RawSql();            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t);";        }        public static void AddValueTest()        {            var maker = QueryMaker.New(_dbScheme)                .INSERT("Customer")                .Col("Name")                .Col("Description")                .Col("Address")                .Col("Zip")                .VALUES("@name, @description, @address").Param("zip");            var sql = maker.RawSql();            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t\t, [Zip]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t\t, @zip\n\t);";        }        public static void JustAddValueTest()        {            var maker = QueryMaker.New(_dbScheme)                .INSERT("Customer")                .Col("Name")                .Col("Description")                .Col("Address")                .Col("Zip")                .VALUES()                .Param("@name")                .Param("description")                .Param("@address")                .Param("zip");            var sql = maker.RawSql();            //var example = "INSERT INTO [dbo].[Customer] (\n\t\t[Name]\n\t\t, [Description]\n\t\t, [Address]\n\t\t, [Zip]\n\t)\n\tVALUES (\n\t\t@name\n\t\t, @description\n\t\t, @address\n\t\t, @zip\n\t);";        }    }

Delete语句构建

 public static class DeleteSqlMaker    {        public static void SetUp()        {            QueryMaker.DbScheme = "dbo";        }        public static void InitDeleteTest()        {            var maker = QueryMaker.New().DELETE("Customer");            var sql = maker.RawSql();            var example = "DELETE FROM [dbo].[Customer];";        }        public static string WhereDeleteTest()        {            var maker = QueryMaker.New().DELETE("Customer").WHERE("Zip = @zip AND Id >= @id");            var sql = maker.RawSql();            //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip AND Id >= @id;";            Console.WriteLine(sql);             Console.WriteLine("-------------------------------------------------------");            return sql;        }        public static string WhereAndDeleteTest()        {            var maker = QueryMaker.New().DELETE("Customer").WHERE("Zip = @zip").WhereAnd("Id >= @id");            var sql = maker.RawSql();            //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip\n\tAND Id >= @id;";            Console.WriteLine(sql);            return sql;        }        public static string WhereOrDeleteTest()        {            var maker = QueryMaker.New()                .DELETE("Customer")                .WHERE("Zip = @zip")                .WhereOr("Id >= @id");            var sql = maker.RawSql();            //var example = "DELETE FROM [dbo].[Customer]" + "\nWHERE Zip = @zip\n\tOR Id >= @id;";            return sql;        }    }

Update语句构建

 public class UpdateSqlMaker    {        public void SetUp()        {            QueryMaker.DbScheme = "dbo";        }        public void InitUpdateTest()        {            var maker = QueryMaker.New()                .UPDATE("Customer");            var sql = maker.RawSql();            //var example = "UPDATE [dbo].[Customer];";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void SetUpdateTest()        {            var maker = QueryMaker.New()                .UPDATE("Customer")                .SET("Id = @id, Name = @name");            var sql = maker.RawSql();            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void ValueSetUpdateTest()        {            var maker = QueryMaker.New()                .UPDATE("Customer")                .SET()                    .Val("Id", "id")                    .Val("Name", "name");            var sql = maker.RawSql();            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name;";        }        public void WhereUpdateTest()        {            var maker = QueryMaker.New()                .UPDATE("Customer")                .SET("Id = @id")                    .Val("Name", "name")                .WHERE("Zip = @zip AND Id >= @id");            var sql = maker.RawSql();            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name" + "\nWHERE Zip = @zip AND Id >= @id;";        }        public void WhereAndUpdateTest()        {            var maker = QueryMaker.New()                .UPDATE("Customer")                .SET("Id = @id")                    .Val("Name", "name")                .WHERE("Zip = @zip")                .WhereAnd("Id >= @id");            var sql = maker.RawSql();            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name" + "\nWHERE Zip = @zip\n\tAND Id >= @id;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }        public void WhereOrUpdateTest()        {            var maker = QueryMaker.New()                .UPDATE("Customer")                .SET("Id = @id")                    .Val("Name", "name")                .WHERE("Zip = @zip")                .WhereOr("Id >= @id");            var sql = maker.RawSql();            //var example = "UPDATE [dbo].[Customer]\nSET\n\tId = @id\n\t, Name = @name"  + "\nWHERE Zip = @zip\n\tOR Id >= @id;";            //Assert.That(sql, Is.EqualTo(example).IgnoreCase);        }    }

Customer业务逻辑层

  class CustomerBLL    {        public static IDapperContext context = new DapperContext();        public static IFactoryRepository repoFactory = new FactoryRepository();        public static IUnitOfWork unitOfWork = new UnitOfWork(context, repoFactory);        public  static Container container=new Container();        public CustomerBLL()        {            //container.Register<IDapperContext, DapperContext>();            //container.Register<IFactoryRepository, FactoryRepository>();            //container.Register<IUnitOfWork, UnitOfWork>();        }        public IEnumerable<Customer> GetBy()        {            IRepository<Customer, CustomerEnum> repo = unitOfWork.GetRepository<Customer, CustomerEnum>();            //如果你没有为数据库实体任何额外的查询或存储过程,你可以使用的空枚举            //var userRepo = unitOfWork.GetRepository<User, EmptyEnum>();            IEnumerable<Customer> customers = repo.GetBy(                    where: new { Zip = "12345", Registered = new DateTime(year: 2013, month: 7, day: 7) },                    order: new { Registered = SortAs.Desc, Name = SortAs.Asc } );            return customers;        }        //通过存储过程获取数据        public IEnumerable<Customer> GetCustomersBystorage()        {            IRepository<Customer, CustomerEnum> repo = unitOfWork.GetRepository<Customer, CustomerEnum>();            // Executing stored procedure            var param = new DynamicParameters();            param.Add("@startIndex", 10);            param.Add("@endIndex", 20);            param.Add("@count", dbType: DbType.Int32, direction: ParameterDirection.Output);            //字符串返回输出参数            //param.Add("@errorMsg", dbType: DbType.String, size: 4000, direction: ParameterDirection.ReturnValue);            IEnumerable<Customer> customers = repo.Exec<Customer>(CustomerEnum.GetCustomerByPage, param);            int count = param.Get<int>("@count");            return customers;        }    }

DapperDAL程序集下载地址

点击

app.config内容:

<?xml version="1.0" encoding="utf-8"?><configuration>    <connectionStrings>      <add name="DapperDal" providerName="System.Data.sqlclient" connectionString="Data Source=.\SQLINSTANCE;Initial Catalog=DapperDalDb;Persist Security Info=True;User ID=sa;Password=123456"/>    </connectionStrings>    <appSettings>      <add key="UsedConnectionString" value="DapperDal"/>      <add key="UseMiniProfilerForSql" value="true"/>      <add key="SqlCommandTimeOut" value="15"/>    </appSettings>  <startup>    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  </startup></configuration>

SQL脚本:

USE [DapperDalDb]GO SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Customer](    [Id] [int] IDENTITY(1,1) NOT NULL,    [Name] [nvarchar](64) NOT NULL,    [Description] [nvarchar](512) NULL,    [Address] [nvarchar](128) NULL,    [Zip] [nvarchar](5) NULL,    [Balance] [decimal](15, 2) NULL,    [Registered] [datetime] NULL, CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED (    [Id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY]GO/****** Object:  StoredProcedure [dbo].[spCustomerListByPageGet]    Script Date: 05/31/2013 00:23:57 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER OFFGOCREATE PROCEDURE [dbo].[spCustomerListByPageGet](@startIndex INT, @endIndex INT, @count INT OUT)ASBEGIN    SET NOCOUNT ON;    DECLARE @tab TABLE (Id INT)    SET @Count = (            SELECT COUNT(Id)            FROM   dbo.Customer        );    WITH CustomerCTE(Id, RowNumber) AS     (        SELECT c.Id AS Id,               ROW_NUMBER() OVER(ORDER BY c.Registered DESC, c.Id) AS 'RowNumber'        FROM   dbo.Customer c    )    INSERT INTO @tab    SELECT Id    FROM   CustomerCTE    WHERE  RowNumber BETWEEN @startIndex AND @endIndex          SELECT c.[Id]      ,c.[Name]      ,c.[Description]      ,c.[Address]      ,c.[Zip]      ,c.[Balance]      ,c.[Registered]    FROM   dbo.Customer      c,           @tab subTable    WHERE  c.Id = subTable.IdENDGO

运行结果如图:

这里写图片描述

0 0