开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

象使用数组一样使用一个数据表变量
作者: ZDNet China
2003-12-16 17:28:21


本文译自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



责任编辑:李宁

欢迎评论投稿

声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号