Transact-SQL语言类型

Transact-SQL是在Microsoft SQL Server和Sybase SQL Server上的ANSI SQL实现。为了遵循ANSI SQL标准,Transact-SQL提供了数据定义语言(DDL)语句和数据操作语句(DML)语句;其次,为了增强灵活性,Transact-SQL还提供了用于编程的流控制语句和其他语句。

1、DDL(Data Definition Language)语句

DDL语句用于创建数据库对象,如表、视图、索引等。下面列出了一些常用的DDL语句。

//修改一个数据库或与数据库关联的文件和文件组
ALTER DATABASE
//更改用户定义函数
ALTER FUNCTION
//更改Microsoft Windows或SQL Server登录账户的属性
ALTER LOGIN
//修改存储过程
ALTER PROCEDURE
//更改架构所有者
ALTER SCHEMA
//通过修改、添加或删除列和约束来修改表定义
ALTER TABLE
//修改先前创建的视图
ALTER VIEW

//创建新的数据库和用来存储数据库的文件
CREATE DATABASE
//创建用户定义函数
CREATE FUNCTION
//未指定表或视图创建关系索引,或为指定表创建XML索引
CREATE INDEX
//创建存储过程
CREATE PROCEDURE
//创建新表
CREATE TABLE
//创建一个虚拟表(视图)
CREATE VIEW

//从SQL Server实例中删除一个或多个用户定义函数
DROP DATABASE
//从当前数据库中删除一个或多个用户定义函数
DROP FUNCTION
//从当前数据库中删除索引
DROP INDEX
//删除表的定义和所有数据、索引、约束及权限规范
DROP TABLE

2、DML语句

DML语句用来检索和修改数据库的内容,下面列出了一些常用的DML语句。

//显示开始一个本地事物
BEGIN TRANSACTION
//释放当前结果集,然后解除定位游标的行上的游标锁定,从而关闭一个开放的游标
CLOSE
//结束事物成功并提交
COMMIT
//从表或视图中删除行
DELET
//回滚事务
ROLLBACK
//从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列
SELECT
//更改表或视图中的现有数据
UPDATE

3、编程和流控制语句

许多人在学习编程时,经常询问编程工具的好坏,哪种语言好学,或是在开发商更具备优势。实际上,编程工具可能还有优劣之分,但是编程语言之间的差别并不大。尤其是像SQL这样的数据处理语言,只要具备了顺序语句、判断语句和循环语句,就可以处理所有业务逻辑。
下面对一些常用的编程语句进行介绍。

(1)IF…ELSE语句

当条件为“真”时,将执行IF关键字后面的语句,当条件为“假”时,将执行ELSE后面的语句。例如,下面的实例:如果变量@i>0,设置@MyVal=100,否则设置@MyVarl=10,最后使用PRINT语句输出@MyVal的值。其中的“–”是注释字符。

DECLARE @i AS int, @MyVal AS int; //声明变量
SET @MyVarl =0; //设置变量值
SET @i =1;

IF @i >0
    SET @MyVarl=100;
ELSE
    SET @MyVarl=10;
PRINT CONVERT(char(12),@MyVarl); //输出@MyVarl变量的值
(2)BEGIN…END

BEGIN…END提供了执行一组SQL语句的方法,此语句对编写IF…ELSE和WHILE循环非常有用。现在将上面示例中IF…ELSE语句改写为下列形式:

IF @i >0
    SET @MyVal=100;
ELSE
    BEGIN
        SET @MyVarl=10;
        PRINT CONVERT(char(12),@MyVarl); //输出@MyVarl变量的值
    END

此时IF…ELSE语句的含义是:如果@i>0,设置@MyVarl=100,否则设置@MyVarl=10,并使用PRINT语句输出@MyVarl的值。

(3)WHILE循环

在WHILE关键字后面,可以编写一个控制循环执行的条件。在WHILE语句循环体的每一次执行前,都要测试条件。如果条件为真,则执行循环体;否则,将执行循环体后面的语句。
例如,下面的示例中使用了循环和判断语句。首先声明3个变量,@MyVar1用于累加1~100之间的奇数值,@MyVar2用于累加1~100之间的偶数值。

DECLARE @i AS int,@MyVar1 AS int,@MyVar2 AS int; //声明变量
SET @MyVar1=0; //设置变量值
SET @MyVar2=0;
SET @i=1;

WHILE @i<100 //开始循环
BEGIN //指定包含在循环中的语句
    IF @i % 2 <>0 //判断是否为奇数
        SET @MyVar1 +@i; //累加奇数
    ELSE
        SET @MyVar2 +@i; //累加偶数
    SET @i = @i +1; //递增@i
END

SELECT @MyVar1,@MyVar2, @i; //显示变量值
(4)GOTO语句和标签

GOTO语句用于将执行流更改到标签处,虽然Transact-SQL和PL/SQL都提供了该语句,但是作为编程而言,我们不推荐使用此编程技术。要编写一个标签,应当在标识符后面加一个冒号。例如,下面的示例使用GOTO语句代替WHILE循环,与上面的WHILE循环示例功能相同。

DECLARE @i AS int, @MyVar2 AS int; //声明变量
SET @MyVar1 = 0; //设置变量值
SET @MyVar2 = 0;
SET @i = 1;

table_loop; //指定标签
    IF @i % 2 <>0 //判断是否为奇数
        SET @MyVar1 = @MyVar1 + @i; //累加奇数
    Else
        SET @MyVar2 = @MyVar2 + @i; //累加偶数
    SET @i = @i + 1; //递增@i
IF(@i<100) GOTO table_loop //跳转到标签处
SELECT @MyVar1,@MyVar2,@i; //显示变量值
(5)使用WAITFOR语句

waitfor语句用于延迟后面语句的执行,可以指定延迟的时间长度或是具体的时间。

WAITFOR DELAY '00:1:15';
PRINT N'到时间了';

//另一种形式
WAITFOR TIME '10:02:10';
PRINT N'到时间了';

第一个waitfor语句使用delay关键字指定在1分15秒后执行后面的print语句,最长延迟时间为24小时。第二个waitfor语句使用了time关键字,指定在10点2分10秒的时候执行后面的print语句。
此语句通常用于并发测试,实际应用中并不多见。例如,可以指定在用一时间执行多个相同的SQL语句

小结

关于T-SQL语句,在刚开始接触的时候也不是很了解它究竟是一个什么东西,而随着学习深度的加深,理解和应用的也越来越多了。现阶段来说,对于SQL优化和性能处理这方面的知识还是很欠缺。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 69
    评论
评论 69
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值