表变量和临时表差不多,但是不会在临时库中存放。
与临时表相比,表变量具有下列优点:
表变量(如局部变量)具有明确定义的范围,在该范围结束时会自动清除这些表变量。 * 与临时表相比,表变量导致存储过程的重新编译更少。 * 涉及表变量的事务仅维持表变量上更新的持续时间。因此,使用表变量时,需要锁定和记录资源的情况更少。因为表变量具有有限的范围并且不是持久性数据库的一部分,所以事务回滚并不影响它们。
表变量例子:
declare @t table(id int identity,col varchar(4)) declare @sql1 varchar(60) declare @i int declare @n int set @sql1='吕布赵云马超典韦关羽张飞许褚黄忠颜良文丑庞德孙策' set @i=1 set @n=2 --定义分段长度 while(@i<len(@sql1)) begin insert into @t select substring(@sql1,@i,@n) set @i=@i+@n end select * from @t
结果:
临时表例子:
--declare @t table(id int identity,col varchar(4)) create table #t(id int identity,col VARCHAR(4)) declare @sql1 varchar(60) declare @i int declare @n int set @sql1='吕布赵云马超典韦关羽张飞' set @i=1 set @n=2 --定义分段长度 while(@i<len(@sql1)) begin insert into #t select substring(@sql1,@i,@n) set @i=@i+@n end select * from #t -- 结果:跟表对象结果相同 select * from #t for xml path('') --结果:<id>1</id><col>吕布</col><id>2</id><col>赵云</col><id>3</id><col>马超</col><id>4</id><col>典韦</col><id>5</id><col>关羽</col><id>6</id><col>张飞</col> select col from #t for xml path('') --结果:<col>吕布</col><col>赵云</col><col>马超</col><col>典韦</col><col>关羽</col><col>张飞</col> select col+',' from #t for xml path('') --结果:吕布,赵云,马超,典韦,关羽,张飞,
二、取父节点下所有子节点(包括子节点的子节点)
ALTER FUNCTION [dbo].[GetChildID] ( @ParentID int ) returns @t table(ID int) as begin insert @t select ID from SYS_RESOURCE where SUP_ID = @ParentID while @@rowcount<>0 begin insert @t select a.ID from SYS_RESOURCE a inner join @t b on a.SUP_ID =b.id and not exists(select 1 from @t where id=a.id) end return end
三、表变量在存储过程中的运用
PROC USE [xb_quotation_dev2] GO /****** Object: StoredProcedure [dbo].[usp_UpdateTodayPriceMange] Script Date: 02/18/2012 14:34:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[usp_UpdateTodayPriceMange] @dt Ty_PublicTodayPrice READONLY AS BEGIN SET NOCOUNT ON; DECLARE @ERRORSMALL SMALLINT =0; BEGIN TRAN; SET @ERRORSMALL=-1; DECLARE @dt_Prices TABLE(AreaID INT NOT NULL ,GoodsId INT NOT NULL,GuidePrice DECIMAL(18,4) NOT NULL ); WITH temp_1 AS( SELECT AreaID,GoodsId,GuidePrice FROM @dt UNION ALL SELECT a.AreaId,t.GoodsId,t.GuidePrice FROM MD_Area a INNER JOIN @dt t ON a.QuotationType= t.AreaID AND EXISTS(SELECT 0 FROM MD_Goods g WHERE g.TypeId=a.GoodsTypeId AND g.ID= t.GoodsId) ) INSERT INTO @dt_Prices SELECT AreaID,GoodsId,GuidePrice FROM temp_1; UPDATE up SET up.GuidePrice=tp.GuidePrice FROM MD_UpdatePrice up INNER JOIN @dt_Prices tp on up.AreaId=tp.AreaId and up.GoodsId=tp.GoodsId AND CONVERT(VARCHAR(10),up.PriceDate,120)=CONVERT(VARCHAR(10),GETDATE(),120) IF(@@ERROR<>0) GOTO ERROR_Handler; SET @ERRORSMALL=-2; INSERT INTO MD_UpdatePrice(AreaID,GoodsId,GuidePrice, PriceDate) SELECT t.*,GETDATE() FROM @dt_Prices t WHERE NOT EXISTS(SELECT 0 FROM MD_UpdatePrice up WHERE up.AreaID=T.AreaID AND up.GoodsId= t.GoodsId) IF(@@ERROR<>0) GOTO ERROR_Handler; SET @ERRORSMALL=-3; UPDATE h SET h.GuidePrice=t.GuidePrice FROM MD_HistoryPrices h,@dt_Prices t WHERE h.GoodsId = t.GoodsId AND h.AreaID=t.AreaID AND CONVERT(VARCHAR(10),h.PriceDate,120)=CONVERT(VARCHAR(10),GETDATE(),120); IF(@@ERROR<>0) GOTO ERROR_Handler; SET @ERRORSMALL=-4; UPDATE p SET p.GuidePrice=tt.GuidePrice FROM MD_Prices p inner join @dt_Prices tt on P.GoodsId = tt.GoodsId AND p.AreaID =tt.AreaID AND CONVERT(VARCHAR(10),p.PriceDate,120)=CONVERT(VARCHAR(10),GETDATE(),120); IF(@@ERROR<>0) GOTO ERROR_Handler; COMMIT TRAN; RETURN 0; ERROR_Handler: ROLLBACK TRAN; RETURN @ERRORSMALL; END GO
可以看到这上面的存储过程中,定义一个表变量,
DECLARE @dt_Prices TABLE(AreaID INT NOT NULL ,GoodsId INT NOT NULL,GuidePrice DECIMAL(18,4) NOT NULL );
此表变量@dt_Prices 有3列,分别是AreaID,GoodsId,GuidePrice,他们类型分别是整形,整形,双精度,都是非空;
可以看到在下面的功能模块中我分别用到这个表变量@dt_Prices
对于上面的存储过程,我定义了一个表值变量Ty_PublicTodayPrice,创建这个表值变量的语法是:
表值变量 USE [xb_quotation_dev2] GO CREATE TYPE [dbo].[Ty_PublicTodayPrice] AS TABLE( [AreaID] [int] NOT NULL, [GoodsId] [int] NOT NULL, [GuidePrice] [decimal](18, 4) NULL ) GO
。。
相关推荐
PHP中,所有的变量都存储在”符号表”的HastTable结构中,符号的作用域是与活动符号表相关联的。因此,同一时间,只有一个活动符号表。 我们要获取到当前活动符号表可以通过 get_defined_vars 方法来获取。 get_...
55 实例052 为TextBox控件添加列表选择框 57 2.2 Button控件应用 58 实例053 在Button按钮中显示图标 58 2.3 ComboBox控件应用 59 实例054 将数据表中的字段添加到ComboBox控件 59 实例...
表示变量具有与数据库的表中某一字段相同的类型 例:v_FirstName s_emp.first_name%TYPE; 3. RECORD类型 TYPE t_emp IS RECORD( /*其中TYPE,IS,RECORD为关键字,record_name为变量名称*/ field1 type [NOT...
6.2.3 为用户设置表空间配额和临时表空间 6.3 创建表空间 6.3.1 创建(永久)表空间 6.3.2 创建大文件表空间 6.3.3 创建临时表空间 6.4 修改表空间 6.4.1 扩展表空间 6.4.2 修改属性、状态 ...
§3.1.3 建立临时表结构 97 §3.3 修改表结构 98 §3.3.1 修改表结构命令 98 §3.3.2 修改表结构例子 99 §3.3.3 删除表结构 101 §3.3.4 使用CHECK作限制约束 101 §3.3.5 使用UNRECOVERABLE创建表 102 §3.3.6 将...
7.3.2 临时名字的重新使用 7.3.3 数组元素的地址计算 7.3.4 数组元素地址计算的翻译方案 7.3.5 类型转换 7.4 布尔表达式和控制流语句 7.4.1 布尔表达式的翻译 7.4.2 控制流语句的翻译 7.4.3 布尔表达式的控制...
§3.1.3 建立临时表结构 97 §3.3 修改表结构 98 §3.3.1 修改表结构命令 98 §3.3.2 修改表结构例子 99 §3.3.3 删除表结构 101 §3.3.4 使用CHECK作限制约束 101 §3.3.5 使用UNRECOVERABLE创建表 102 §3.3.6 将...
5.4 例子:创建乘方表 5.5 从编译器的角度观察函数原型 5.6 函数定义顺序的另一种风格 5.7 函数调用和传值调用 5.8 开发大型程序 5.9 使用断言 5.10 作用域规则 5.10.1 平行和嵌套代码块 5.10.2 以调试为目的使用...
§3.1.3 建立临时表结构 97 §3.3 修改表结构 98 §3.3.1 修改表结构命令 98 §3.3.2 修改表结构例子 99 §3.3.3 删除表结构 100 §3.3.4 使用CHECK作限制约束 101 §3.3.5 使用UNRECOVERABLE创建表 102 §3.3.6 将...
安装依赖项导入组件代码分割添加样式表后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件使用public文件夹更改HTML 在模块系统之外添加资产何时使用public文件夹使用全局变量添加引导程序使用自定义...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...
21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 拥塞举例 233 21.6 拥塞避免算法 235 21.7 ...