象使用数组一样使用一个数据表变量

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

虽然你可以象数组一样使用一个数据表变量,对于它能够使用的数据类型是有限制的。例如,你不能在一个数据表变量中包含另一个数据表变量。

你可以象申明一个用户定义的数据表一样申明一个数据表变量;但是,在你申明了它以后,你就不能再改变数据表的定义了。另外,你必须在申明的时候定义数据表变量的所有属性。

并不是所有的INSERT命令都能够在数据表变量上操作。例如,你不能在向数据表变量插入值的时候使用EXEC命令。执行一个存储过程或者插入值到数据表变量的字符串命令会返回一个错误。同样,不是所有的SELECT 命令都能够在数据表变量上操作而且你不能使用SELECT INTO 命令来插入数据到一个数据表变量中去。

你不能在数据表变量上使用一些系统过程,比方sp_depends。数据表变量的对象名在运行时生成,并且是一个随机的名字,它被保存在tempdb数据库里。因为大多数的系统功能和系统过程需要对象名或者标识数值,所以要在一个数据表变量上执行系统功能或者过程是困难的。需要复杂的逻辑来获得对象的名字以及/或者标识数值来运行系统功能和过程。

一个数据表变量的作用域是批处理过程,存储过程或者函数执行的过程。当批处理过程中GO命令被触发了,数据表变量也就出离了它的作用域。

下面是在一个存储过程中使用一个数据表变量的简单脚本。

CREATE PROCEDURE TestName

AS

DECLARE @TableId TABLE

(table_id INT IDENTITY NOT NULL

primary key nonclustered,

id INT NOT NULL,

name sysname NOT NULL

DEFAULT 'UNKNOWN',

type char(2) NOT NULL

DEFAULT '9',

crdate datetime NOT NULL

DEFAULT current_timestamp)

INSERT @TableId (id, name, type, crdate)

SELECT id, 'test_' + name, type, crdate FROM tempdb..sysobjects

SELECT * FROM @TableID

GO

exec TestName

GO

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航