sql 中 table变量的使用

 SQL Server 2000 新增了Table型数据:Table型数据不能用来定义列的类型,只能用作T-SQL变量或者作为自定义函数的返回值。

SQL Server 2000支持两种类型的函数:内置函数和用户定义函数。内置函数只允许T-SQL 语句调用而不能更改使用。

用户定义函数可以根据需要定义自己所需的函数。用户定义函数可以带参数,也可以不带参数,但只能返回单值。正是由于这个原因SQL Server 2000增加了table型数据,其值可以是整型字符型或数值型。文中用一个简单的用户定义函数说明了用户定义函数的基本结构。

   table 数据类型只能用于定义 table 类型的局部变量或用户定义函数的返回值。该数据类型主要用于临时存储一组行,这些行将作为表值函数的结果集返回。可以将函数返回值和变量声明为table类型

   table 类型变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。

   在存储过程中使用table类型变量与使用临时表相比,减少了存储过程的重新编译量。

   涉及table类型变量的事务只在table类型变量更新期间存在。这样就减少了table类型变量对锁定和记录资源的需求。 

不支持在表变量之间进行赋值操作。另外,由于table类型变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。

不支持在table类型变量之间进行赋值操作。另外,由于table类型变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。

select * from dbo.userdb

/*定义table类型的变量和创建表、变量的许多地方都是相同的。*/

declare @dbTable table(id int identity(1,1),oid int,number char(10) not null,name nvarchar(50) not null,phone nvarchar(20))

insert into @dbTable(oid,number,name,phone)

select top 10 id,number,name,phone from dbo.userdb where LEN(number)>9 and LEN(name)>0

select * from @dbTable

/*对table变量里面的数据进行增删改,不会影响的真实table中的数据*/

update @dbTable set name='修改table变量里面的值' where id=1

delete from @dbTable where id=1

insert into @dbTable(oid,number,name,phone) values(11,'1990092121','自定义','1234567')

select * from @dbTable

select * from dbo.userdb where id=3

select * from dbo.userdb where number='1990092121'

/*

用到是定义变量时的declare但是后面却和创建表用的格式是相同的。但是在调用table类型变量时又体现出它具有表的某些性质。在我个人看来table类型的变量是具有表和一般变量的交集的特性。

通过编写函数来实现学习table类型的使用方法

*/

create function ReturnViews(@type nvarchar(20))

returns table

as

 return(

select id,number,name phone,cname from dbo.userdb where [type]=@type

 )

GO 

/*调用返回table的函数*/

select * from dbo.ReturnViews('报关代理')

发布了72 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sumjob/article/details/103468544
今日推荐