use master
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: mayb
-- Create date: 2015-03-11
-- Description: 根据条件查询数据库存储过程
-- =============================================
alter PROCEDURE prop_GetProps
@DbName nvarchar(100), --数据库名称
@Name nvarchar(100), --存储过程名称
@Definition nvarchar(500), --存储过程主体
@BTcreate_date nvarchar(20), --存储过程创建时间
@ETcreate_date nvarchar(20), --存储过程创建时间
@BTmodify_date nvarchar(20), --存储过程修改时间
@ETmodify_date nvarchar(20), --存储过程修改时间
@startIndex int, --开始索引
@endIndex int, --结束索引
@recordCount int output --检索的数据总数
/*
declare @recordCount int
exec prop_GetProps '','','','','','','',1,999999,@recordCount
print @recordCount
*/
AS
BEGIN
--查询条件
declare @where varchar(max)=''
--分页索引
declare @pagingWhere varchar(max)= ' where rowNum between '+CAST(@startIndex as varchar(10))+' and '+CAST(@endIndex as varchar(10))+''
--结果数
declare @countSql nvarchar(max)=''
--查询的SQL
declare @sql varchar(max)=''
--如果起始索引是1的时候,创建新的视图
if(@startIndex=1)
begin
print @startIndex
if(EXISTS(SELECT * FROM sys.views WHERE name = 'view_Props'))
begin
drop view view_Props
end
if(@DbName!='')
begin
set @sql='select a.name,a.[type],a.create_date,a.modify_date,b.[definition],'''+@DbName+''' as dbname from ['+@DbName+'].sys.all_objects a,['+@DbName+'].sys.sql_modules b where a.is_ms_shipped=0 and a.object_id = b.object_id and a.[type] in (''P'',''V'',''AF'')'
end
else
begin
--select dbid,name from master..sysdatabases where dbid>4
declare @dbid int
declare @maxdbid int
select @dbid = min(dbid),@maxdbid=max(dbid) from master..sysdatabases where dbid>4
while @dbid is not null
begin
select @DbName=name from master..sysdatabases where dbid = @dbid
set @sql+='(select a.name,a.[type],a.create_date,a.modify_date,b.[definition],'''+@DbName+''' as dbname from ['+@DbName+'].sys.all_objects a,['+@DbName+'].sys.sql_modules b where a.is_ms_shipped=0 and a.object_id = b.object_id and a.[type] in (''P'',''V'',''AF''))'
if(@dbid != @maxdbid)
begin
set @sql+=' union all '
end
select @dbid = min(dbid) from master..sysdatabases where dbid > @dbid
end
end
set @sql='create view view_Props as '+@sql
exec(@sql)
end
set @countSql='select @recordCount=count(*) from view_Props where 1=1'
set @sql='select ROW_NUMBER() over(order by name asc) as rowNum,* from view_Props where 1=1'
if(@Name!='')
begin
set @where+=' and name like ''%'+@Name+'%'' '
end
if(@Definition!='')
begin
set @where+=' and definition like ''%'+@Definition+'%'' '
end
if(@BTcreate_date!='' and @ETcreate_date!='')
begin
set @where+=' and create_date > '''+@BTcreate_date+''' and create_date < '''+@ETcreate_date+''''
end
else
begin
if(@BTcreate_date!='')
begin
set @where +=' and create_date > '''+@BTcreate_date+''''
end
if(@ETcreate_date!='')
begin
set @where +=' and create_date < '''+@ETcreate_date+''''
end
end
if(@BTmodify_date!='' and @ETmodify_date!='')
begin
set @where+=' and modify_date > '''+@BTmodify_date+''' and modify_date < '''+@ETmodify_date+''''
end
else
begin
if(@BTmodify_date!='')
begin
set @where +=' and modify_date > '''+@BTmodify_date+''''
end
if(@ETmodify_date!='')
begin
set @where +=' and modify_date < '''+@ETmodify_date+''''
end
end
set @countSql+=@where
set @sql+=@where
set @sql='select * from ('+@sql+') as t '+@pagingWhere
exec(@sql)
exec sp_executesql @countSql,N'@recordCount int out',@recordCount out
END
GO