MSSQL 临时表学习

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

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

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

2.临时表的概念

可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。
本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。

一般都是用本地临时的(#) 其他人看不到 创建方法和创建表一样只是表名前面有个#

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

exec sp_executesql  @sqllen, N‘@TotleCount int output‘,@TotleCount output

原版用临时表实现的结果

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=‘[email protected]
end
if(ISNULL( @Money,‘‘)!=‘‘)
begin
set @sql+= ‘ and main_money=‘[email protected]
end
declare @start int
declare @end int
set @start= (@Index-1)*@Size+1
set @[email protected]*@Index
set @sqllen=‘ insert into #tt select count(1) from (‘[email protected]+‘) t ‘
--print(@sqllen)
exec(@sqllen)
select @TotleCount=tLen from #tt
set @sql= ‘select * from ( ‘[email protected]+‘) 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=‘[email protected]
end
if(ISNULL( @Money,‘‘)!=‘‘)
begin
set @sql+= ‘ and main_money=‘[email protected]
end
declare @start int
declare @end int
set @start= (@Index-1)*@Size+1
set @[email protected]*@Index

set @sqllen=‘ select @TotleCount= count(1) from (‘[email protected]+‘) t ‘
exec sp_executesql @sqllen, N‘@TotleCount int output‘,@TotleCount output

set @sql= ‘select * from ( ‘[email protected]+‘) 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

时间: 2024-11-01 11:40:49

MSSQL 临时表学习的相关文章

MSSQL 临时表和公用表使用案例

1.临时表: 1.1)实例1 if(OBJECT_ID('tempdb..#a') IS NOT NULL) drop table #a; if(OBJECT_ID('tempdb..#b') IS NOT NULL) drop table #b; SELECT name into #a from syscolumns a with(nolock) where id=OBJECT_ID('NewsLetterSystem_Subscriber'); SELECT name into #b fro

MSsql优化学习记录

MSsql优化篇  1 --该视图可以用来优化sql,包含sql执行的多种信息 2 SELECT TOP 10 * FROM sys.dm_exec_query_stats sys.dm_exec_query_stats 中的字段sql_handle 通过调用 sys.dm_exec_sql_text 动态管理函数,sql_handle 可以和 statement_start_offset 及 statement_end_offset 一起用于检索查询的 SQL 文本. sys.dm_exec_

MSSQL基础学习--数据库操作

1.创建单一数据库 CREATE DATABASE test ON ( NAME = main_dat, --数据库名称 FILENAME = 'e:/program files/Microsoft sql server/mssql/data/maindat.mdf', --物理路径 SIZE = 10, --初始容量,默认单位是MB MAXSIZE = 50, --最大容量 FILEGROWTH = 5 --增长值 ) LOG ON ( NAME = 'main_log', FILENAME

MSSQL基础学习--查询

人物表: 能力表: 1.Select select all 性别 from people --将返回27个值,虽然内容都是"男"和"女" select distinct 性别 from people --只会显示两个值"男"和"女" select top 5 性别 from people --只显示前5条检索到的信息 select top 30 percent 性别 from people --显示前30%检索到的信息 2.I

MSSQL语句学习(查询表的总记录数)

如何高效查询表的总记录数(通用方法) SELECT COUNT(1) ROWS FROM product 野路子1:利用系统自带的存储过程SP_SPACEUSED,详细的使用方式推荐谷哥或度娘, EXEC SP_SPACEUSED 'PRODUCT' 野路子2: 很多表都会设计一个步长为1的自增长整型(INT)列作为表主键,该做法优劣这里不展开讨论,仅基于这一"习惯",外加一个假设:该字段连续无为断,则可以使用MAX函数了,限制较多哈 1,自增长列 2,该列连续 SELECT MAX(

学习笔记 MSSQL显错手工注入

和朋友一起学习,速度就是快.感谢珍惜少年时. 网上很多都在长篇大论MSSQL显错手工注入,其实原理只有一小段.如下: ' and (查询一段内容)=1 and 'C'='Cnvarchar类型(查询一段内容的返回) 会自动转换int类型 ,肯定会转换失败.然后报错将nvarchar类型(查询一段内容的返回) 的值显示出来. 由这个原理衍生出单字段查询.如下: ' and 0=(SELECT top 1 username FROM table) and 'C'='C 然后有衍生出多字段查询.如下:

Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server..

Atitit.mysql  oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server.. 1. with ... as (...) 在mysql中应该如何表示 1 2. 子查询和查询嵌套主要是便于可读性提升上, 2 3. MYSQL中的解决之道::临时表. 2 4. Seo黑头关键字替换链接的统计样品 2 4.1. //---------查询com网站的数量 2 4.2. //----------------------查询net网站的

Mysql学习笔记(十一)临时表+视图

原文:Mysql学习笔记(十一)临时表+视图 学习内容: 临时表和视图的基本操作... 临时表与视图的使用范围... 1.临时表   临时表:临时表,想必大家都知道这个概念的存在...但是我们什么时候应该使用到临时表呢?当一个数据库存在着大量的数据的时候,我们想要获取到这个数据集合的一个子集,那么我们就可以使用临时表来保存我们想要的数据..然后对临时表进行操作就可以了...使用临时表必然是有原因的..使用临时表会加快数据库的查询性能.... create temporary table tmp_

学习笔记之ACCESS和MS-SQL数据库与ZBLOG系统如何选择搭配?

我开始接触ZBLOG系统是因为先了解了月光博客和卢松松之后,因为他们的博客很强悍,让我学习到了不少知识,因此也开始建站了,那时候由于是早期,数据量一般都小,而且系统也都不成熟,因此只有ACCESS这样的小型数据库,也是因为互联网初级发展阶段的缘故,大家对相对复杂的数据库并不了解,也不懂的如何搭建,尤其是对于我这样的入门级人士来说,根本不会搭建SQL SERVER这样的中型数据库,如果要建设自己的博客,那就相当困难了. 环境配置和案例:采用ZBLOG ASP系统,搭配SQL ERVER2008数据