MSSQL 临时表学习

 在家学习下MSSQL的零食表玩法 经过一个存储过程 由于不知道怎么怎么在存储过程里动态调用SQL 因此不得不想另想办法 因此想到了临时表的办法 其关键点就是在获得的条数数据储存到临时表中而后再读取临时表 从而达到获取所有条数的目的 其中也学到了很多新东西sql

1.临时表的判断存在的写法  (临时表表名 #tt)函数

if(exists(select * from tempdb..sysobjects where id = OBJECT_ID('tempdb..#tt') ) ) 学习

2.临时表的概念table

能够建立本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在全部会话中均可见。
本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。变量

通常都是用本地临时的(#) 其余人看不到 建立方法和建立表同样只是表名前面有个#object

3.存储过程当中动态执行SQL的函数 sp_executesql 记得动态SQL的变量类型不能为varchar 必须是N开头的 例如nvarcharselect

exec sp_executesql  @sqllen, N'@TotleCount int output',@TotleCount output 方法

 

 

原版用临时表实现的结果im

if(exists(select * from sysobjects where id= OBJECT_ID('procTest') ))
begin
drop proc procTest
end 数据

go
create proc procTest
@FeeID varchar(100),
@Money varchar(100),
@Index int,
@Size int,
@TotleCount int output
as
if(exists(select * from tempdb..sysobjects where id = OBJECT_ID('tempdb..#tt') ) )
begin
truncate table #tt
end
else
begin
create table #tt
(
tLen int
)
end
declare @sql varchar(max)
declare @sqllen varchar(max)
set @sql='select ROW_NUMBER() over(order by main_time) as rowIndex ,* from main where 1=1 '
if(ISNULL( @FeeID,'')!='')
begin
set @sql+= ' and main_feeId='+@FeeID
end
if(ISNULL( @Money,'')!='')
begin
set @sql+= ' and main_money='+@Money
end
declare @start int
declare @end int
set @start= (@Index-1)*@Size+1
set @end=@Size*@Index
set @sqllen=' insert into #tt select count(1) from ('+@sql+') t '
--print(@sqllen)
exec(@sqllen)
select @TotleCount=tLen from #tt
set @sql= 'select * from ( '+@sql+') t where rowIndex between '+ CONVERT(varchar(10), @start) +' and '+ CONVERT(varchar(10), @end)
exec(@sql)

改写后的结果

if(exists(select * from sysobjects where id= OBJECT_ID('procTest') ))
begin
drop proc procTest
end

go
create proc procTest
@FeeID varchar(100),
@Money varchar(100),
@Index int,
@Size int,
@TotleCount int output
as

declare @sql varchar(max)
declare @sqllen nvarchar(max)
set @sql='select ROW_NUMBER() over(order by main_time) as rowIndex ,* from main where 1=1 '
if(ISNULL( @FeeID,'')!='')
begin
set @sql+= ' and main_feeId='+@FeeID
end
if(ISNULL( @Money,'')!='')
begin
set @sql+= ' and main_money='+@Money
end
declare @start int
declare @end int
set @start= (@Index-1)*@Size+1
set @end=@Size*@Index

set @sqllen=' select @TotleCount= count(1) from ('+@sql+') t '
exec sp_executesql @sqllen, N'@TotleCount int output',@TotleCount output

set @sql= 'select * from ( '+@sql+') t where rowIndex between '+ CONVERT(varchar(10), @start) +' and '+ CONVERT(varchar(10), @end)
exec(@sql)

 

调用

declare @aa int exec procTest '7','',1,40, @aa output select @aa

相关文章
相关标签/搜索