版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WuLex/article/details/52527024
每天都是一个起点,每天都有一点进步,每天都有一点收获!
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 ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE 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 ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[spCustomerListByPageGet](@startIndex INT, @endIndex INT, @count INT OUT)
AS
BEGIN
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.Id
END
GO