数据载入...请您稍候.
 
 
 
SQL第三课
[ 2008-3-28 23:20:00 | By: 梦瑶 ]
 

第三章 标识符与变量

==============================
一 数据库的兼容级别
==============================

Microsoft SQL Server 数据库语言有不同的版本,每种版本都提供了兼容前面版本的级别,在 SQL Server 2000 中,用于存储系统表格和环境信息的 master 数据库的兼容级别为 80。

==============================
二 标识符
==============================
数据库对象的名称被看成是该对象的标识符。Microsoft SQL Server 中的每一内容都可带有标识符。服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束、规则等)都有标识符。在SQL2000中标识符分为两种,常规标识符和分割标识符;

1 常规标识符

常规标识符指的是,符合标识符的格式规则。而格式规则取决于数据库的兼容级别,当兼容级别为 80 时,规则是:

(1)第一个字符必须是:
字母,下划线(_),at 符号 (@) 或者数字符号 (#)。
(2)后续字符可以是:
字母,十进制数字,at 符号(@)、美元符号 ($)、数字符号(#)或下划线(_)。
(3)标识符不能是 Transact-SQL 的保留字。
(4)不允许嵌入空格或其它特殊字符。
(5)不符合规则的标识符必须用双引号或方括号分隔。

 

2 分隔标识符

包含在双引号 (") 或者方括号 ([ ]) 内。


常规标识符和分隔标识符包含的字符数必须在 1 到 128 之间。对于本地临时表,标识符最多可以有 116 个字符。在 SQL Server 中,某些处于标识符开始位置的符号具有特殊意义。以 at 符号开始的标识符表示局部变量或参数。以一个数字符号开始的标识符表示临时表或过程。以双数字符号 (##) 开始的标识符表示全局临时对象,某些 Transact-SQL 函数的名称以双 at 符号 (@@) 开始。

 

示例1

创建一个名为tt的数据库,在数据库中创建表zmy,在表中创建如下字段,其中id为自动编号;

别名     数据类型      长度    允许空

id        bigint        8         
name      nchar         10
sex       char          10
[ag e]    tinyint       1
[date]    datetime      8

在创建以上表时我们会看到,两个不符合标识符规则的变量,系统自动加上了方括号,查询这两个的语句如下所示;


SELECT *, [date] AS Expr1, [ag e] AS Expr2
FROM zmy


在查询分析器输入以下命令,运行后查看结果集:

USE tt
SELECT *, [date] AS Expr1, [ag e] AS Expr2
FROM TABLE1
GO

注1;常用单词含义

table 欲修改的表之名称。
field 欲在表内增加或删除的字段的名称。或表内欲被替换的字段名称。
type 字段的数据类型。
size 字段的字符长度 (文本及二进制字段)。
index 字段索引。

注2;AS

无论何时使用合计函数或查询,而且该查询返回含糊的或重复的 Field 对象名称,都必须用 AS 子句来提供 Field 对象的替代名称。

 

==============================
三 变量
==============================
变量是可以保存数据值的存储区域。每一个应用程序变量都有数据类型和大小。Transact-SQL语言有两种变量,全局变量和局部变量;

◎全局变量

在Transact-SQL中,全局变量为函数形式,用来引用函数。在SQL Server 7.0及以前版本,全局变量指的是,由系统提供且预先声明的变量,通过在名称前保留两个 (@@) 符号区别于局部变量。


◎ 局部变量

Transact-SQL 局部变量是可以保存特定类型的单个数据值的对象。局部变量由用户来定义;

------------------------------
1 变量声明
------------------------------
声明变量使用DECLARE语句,变量声明后都初始化为NULL;
【declare;vt,宣告,声明】

语法:

DECLARE
    {{ @local_variable data_type }
        | { @cursor_variable_name CURSOR }
        | { table_type_definition }
    } [ ,...n]


参数
(1)@local_variable
为变量的名称,必须以 at 符 (@) 开头,必须符合标识符规则。

(2)data_type

为任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。

(3)@cursor_variable_name

是游标变量的名称。游标变量名必须以 at 符 (@) 开头并遵从标识符规则。CURSOR指定变量是局部游标变量。

(3)n

是表示可以指定多个变量并对变量赋值的占位符。当声明表变量时,表变量必须是 DECLARE 语句中正在声明的唯一变量。


示例2

1 DECLARE @MyCounter INT

注:
DECLARE语句使用int数据类型创建名称为 @mycounter 的局部变量。


2 DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @State NCHAR(2)

注:创建多个变量时,用逗号分割。


------------------------------
2 为变量赋值
------------------------------
若要为变量赋值,请使用 SET 语句。这是为变量赋值的较好的方法。也可以通过 SELECT 语句的选择列表中当前所引用值为变量赋值。

示例3

DECLARE  @myName CHAR(20), @myage INT
SET @myName = '小李'
SELECT @myage = 22
PRINT @myName
PRINT @myage

 


------------------------------
3 变量的作用域
------------------------------
变量的作用域为可以引用该变量的 Transact-SQL 语句范围。变量的作用域从声明变量的地方开始到声明变量的批处理或存储过程的结尾。


示例4

DECLARE  @myName CHAR(20), @myage INT
SET @myName = '小李'
SELECT @myage = 22
PRINT @myName
PRINT @myage
GO

上面的语句是没问题的,如果改成下面的语句,则程序会出现语法错误,因为在一个批处理中所引用的变量是在另一个批处理中定义的:

DECLARE  @myName CHAR(20), @myage INT
SET @myName = '小李'
SELECT @myage = 22
PRINT @myName
GO
PRINT @myage
GO

语法检查显示:

服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@myage'

 

 

 

 

 

 

 

 

 

 

 
 
发表评论:
数据载入...请您稍候.
 
 
数据载入...请您稍候.

数据载入...请您稍候.
 

时 间 记 忆
数据载入...请您稍候.

最 新 评 论
数据载入...请您稍候.

最 新 日 志
数据载入...请您稍候.

最 新 留 言
数据载入...请您稍候.

搜 索

用 户 登 录
数据载入...请您稍候.

友 情 连 接

模板设计:部落窝模板世界

数据载入...请您稍候.


 
Copyright ©2005-2008. 中国蓝盔网 All rights reserved.

辽ICP备 05005129号
部落窝Blog模板世界
Powered by Oblog.