分页存储过程,存储过程嵌套示例

b)存储过程二:选出旧企业的数据,然后通过循环嵌套的方式,通过循环语句调用存储过程一,删除所有的旧企业数据及其产品数据
存储过程代码如下: /* 功能:删除旧企业数据,同时删除关联的表,包括
创建人: 创建日期:2007-4-11 修改日期:2007-4-11 */ CREATE PROCEDURE
[DeleteOldEnterprise] AS declare @strSQL nvarchar(4000) declare
@EnterpriseID nvarchar(10) DECLARE Enterprise_CURSOR Cursor FOR Select
cEnterpriseId from prd_wxt_enterprise_tbl_EnterpriseInfo where
e_system=1 or e_system is null OPEN Enterprise_CURSOR Fetch next from
Enterprise_CURSOR into @EnterpriseID –以下一直到END都是循环语句 WHILE
@@FETCH_STATUS = 0 BEGIN –下面这行是调用存储过程一删除企业及其产品数据
exec DeleteEnterprise @EnterpriseID Fetch next from Enterprise_CURSOR
into @EnterpriseID END CLOSE Enterprise_CURSOR DEALLOCATE
Enterprise_CURSOR GO

本文转自:

核心提示:事例数据库表:企业信息表表名称prd_wxt_enterprise_tbl_EnterpriseInfo数据来源
存储数据企业信息表主键/外键 字段名称说明类型

[sql] view
plain
copy
print?

1)事例数据库表: 企业信息表 表名称
prd_wxt_enterprise_tbl_EnterpriseInfo 数据来源 存储数据 企业信息表
主键/外键 字段名称 说明 类型 备注 cEnterpriseId n企业ID Char(10)
sEnterpriseName n企业名称 Varchar(200) sShortName n简称 Varchar(50)
sAddress n地址 nVarchar(200) E_system n企业所属系统 Char(1)

怎么在数据库中测试呢?

产品表 表名称 Shop_tbl_ProductInfo 数据来源 存储数据 产品表 主键/外键
字段名称 说明 类型 备注 P_Code(PK)
n产品SKU号,即下单号,产品系统编号(p123456789) Char(10) not null
EnterpriseId n企业ID Char(10) not null P_Name n产品名称 Nvarchar(100)
not null P_Price n产品价格 Money P_UserPrice n产品会员价 Money Remark
n备注 Nvarchar(500) 2)要实现的功能:
删除旧企业数据及相关的产品,要求用嵌套存储过程实现
3)存储过程:包括两个存储过程
a)存储过程一:根据企业ID,删除该企业及下面的产品: 存储过程代码如下:
/* 功能:删除企业,同时删除关联的表,包括企业表及其关联的产品表数据
创建人: 创建日期:2007-4-10 修改日期:2007-4-10 */ CREATE PROCEDURE
[DeleteEnterprise] ( @EnterpriseID nvarchar(10) ) AS declare @strSQL
nvarchar(4000) –删除企业产品表 select @strSQL = delete from
Shop_tbl_ProductInfo where EnterpriseId=+@EnterpriseID+; exec(@strSQL)
–删除企业表 select @strSQL = delete from
prd_wxt_enterprise_tbl_EnterpriseInfo where
cEnterpriseID=+@EnterpriseID+; exec(@strSQL) GO

 

[sql] view
plain
copy
print?

[sql] view
plain
copy
print?

版权声明:作者:jiankunking 出处: 
本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  1. select count(*) from sysobjects ;  
  2. declare @CountsAA int   
  3. exec [dbo].[A_P_HelpPageShow] ‘sysobjects’, ‘*官方澳门新永利下载, ‘, ‘id ‘,20, 1,1, ‘ ‘,@CountsAA output   
  4. print @CountsAA –这个可有可无  

    select count() from sysobjects ;
    declare @CountsAA int
    exec [dbo].[A_P_HelpPageShow] ‘sysobjects’, ‘
    ‘, ‘id ‘,20, 1,1, ‘ ‘,@CountsAA output
    print @CountsAA –这个可有可无

拓展:

  1. declare @pageCount int   
  2. declare @Counts int   
  3. exec [dbo].[proc_ListPageInt] ‘sysobjects’, ‘* ‘, 20,1,@pageCount output,@Counts output,’id’, 0,”,’id’,0  
  4. print @pageCount –这个可有可无   
  5. print @Counts –这个可有可无   

    declare @pageCount int
    declare @Counts int
    exec [dbo].[proc_ListPageInt] ‘sysobjects’, ‘* ‘, 20,1,@pageCount output,@Counts output,’id’, 0,”,’id’,0
    print @pageCount –这个可有可无
    print @Counts –这个可有可无

官方澳门新永利下载 1

CREATE  PROCEDURE [dbo].[A_P_HelpPageShow]
(
@TableName   nvarchar(max),       -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列 
@OrderField varchar(255)='',      -- 排序的字段名
@PageSize   int = 10,          -- 页尺寸
@PageIndex int = 1,          -- 页码
@strWhere varchar(1500) = '', -- 查询条件 (注意: 不要加 where)
@Counts    int = 0  output  --查询到的记录数
)
AS
declare @strSQL   nvarchar(4000)       -- 主语句
declare @totalRecord int  --查询到的记录数
declare @SqlCounts nvarchar(max)     ----对总数查询进行SQL构造
--计算总记录数
begin
    if @strWhere !=''
set @SqlCounts = 'select @totalRecord=count(*)  from ' + @TableName + ' where '+@strWhere
    else
set @SqlCounts = 'select @totalRecord=count(*)  from ' + @TableName + '' 
end 

exec sp_executesql @SqlCounts,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数
set  @Counts=@totalRecord 

BEGIN
IF (@strWhere='' or @strWhere IS NULL)
SET @strSQL = 'Select * FROM (select ' + @strGetFields + ',ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId from ' + @TableName
ELSE
SET @strSQL = 'Select * FROM (select ' + @strGetFields + ',ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId from ' + @TableName + ' where ' + @strWhere    
END
 --处理页数超出范围情况 
    IF @PageIndex<=0 
        SET @PageIndex = 1

     --处理开始点和结束点
    DECLARE @StartRecord INT 
    DECLARE @EndRecord int

    SET @StartRecord = (@pageIndex-1)*@PageSize + 1
    SET @EndRecord = @StartRecord + @PageSize - 1

     --继续合成sql语句
    SET @strSQL = @strSQL + ') as tempTable where rowId >=' + CONVERT(VARCHAR(50),@StartRecord) + ' and rowid<= ' + CONVERT(VARCHAR(50),@EndRecord)

exec sp_executesql @strSQL


GO

 

 

 

执行效果如下:

怎么在数据库中测试呢?

存储过程二(优化版)

发表评论

电子邮件地址不会被公开。 必填项已用*标注