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

ZDNet软件频道 时间:2003-12-16 作者:ZDNet China |  我要评论()
本文关键词:sqltips sql 数据库
你可以象申明一个用户定义的数据表一样申明一个数据表变量;但是,在你申明了它以后,你就不能再改变数据表的定义了。另外,你必须在申明的时候定义数据表变量的所有属性。
本文译自Builder.com,未经许可请勿转载

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

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

并不是所有的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



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134