Transact—SQL

T-SQL是Microsoft公司在关系型数据库管理系统SQL Server中的SQL-3标准的实现,是微软对SQL的扩展,具有SQL的主要特点,同时增加了变量、运算符、函数、流程控制和注释等语言元素,使得其功能更加强大。T-SQL对SQL Server 十分重要,SQL Server中使用图形界面能够完成的所有功能,都可以利用T-SQL来实现。使用T-SQL操作时,与SQL Server通信的所有应用程序都通过向服务器发送T-SQL语句来进行,而与应用程序的界面无关。

根据其完成的具体功能,可以将T-SQL语句分为四大类,分别为数据定义语句,数据操作语句,数据控制语句和一些附加的语言元素。

? 变量

1、 局部变量(Local Variable)

局部变量是用户可以自定义的变量,它的作用范围是仅在程序内部,在程序中通常用来储存从表中查询到的数据或当做程序执行过程中的暂存变量。使用局部变量必须以@开头,而且必须用declare命令后才能使用。

基本语法:

声明变量
declare @变量名 变量类型 [@变量名 变量类型]
为变量赋值
set @变量名 = 变量值;
select @变量名 = 变量值;
declare @id char(10)--声明一个长度的变量id
declare @age int    --声明一个int类型变量age
    select @id = 22    --赋值操作
    set @age = 55    --赋值操作
    print convert(char(2), @age) + ‘#‘ + @id

结果 55#22
简单hello world示例
declare @name varchar(20);
declare @result varchar(200);
set @name = ‘jack‘;
set @result = @name + ‘ say: hello world!‘;
select @result;
查询数据示例
declare @id int, @name varchar(20);
set @id = 1;
select @name = name from student where id = @id;
select @name;

从上面的示例可以看出,局部变量可用于程序中保存临时数据、传递数据。Set赋值一般用于赋值指定的常量个变量。而select多用于查询的结果进行赋值,当然select也可以将常量赋值给变量。

注意:在使用select进行赋值的时候,如果查询的结果是多条的情况下,会利用最后一条数据进行赋值,前面的赋值结果将会被覆盖。

2、 全局变量(Global Variable)

全局变量是系统内部使用的变量,其作用范围并不局限于某一程序而是任何程序均可随时调用的。全局变量一般存储一些系统的配置设定值、统计数据。

全局变量
select @@identity;--最后一次自增的值
select identity(int, 1, 1) as id into tab from student;--将studeng表的烈属,以/1自增形式创建一个tab
select * from tab;
select @@rowcount;--影响行数
select @@cursor_rows;--返回连接上打开的游标的当前限定行的数目
select @@error;--T-SQL的错误号
select @@procid;
 
--配置函数
set datefirst 7;--设置每周的第一天,表示周日
select @@datefirst as ‘星期的第一天‘, datepart(dw, getDate()) AS ‘今天是星期‘;
select @@dbts;--返回当前数据库唯一时间戳
set language ‘Italian‘;
select @@langId as ‘Language ID‘;--返回语言id
select @@language as ‘Language Name‘;--返回当前语言名称
select @@lock_timeout;--返回当前会话的当前锁定超时设置(毫秒)
select @@max_connections;--返回SQL Server 实例允许同时进行的最大用户连接数
select @@MAX_PRECISION AS ‘Max Precision‘;--返回decimal 和numeric 数据类型所用的精度级别
select @@SERVERNAME;--SQL Server 的本地服务器的名称
select @@SERVICENAME;--服务名
select @@SPID;--当前会话进程id
select @@textSize;
select @@version;--当前数据库版本信息
 
--系统统计函数
select @@CONNECTIONS;--连接数
select @@PACK_RECEIVED;
select @@CPU_BUSY;
select @@PACK_SENT;
select @@TIMETICKS;
select @@IDLE;
select @@TOTAL_ERRORS;
select @@IO_BUSY;
select @@TOTAL_READ;--读取磁盘次数
select @@PACKET_ERRORS;--发生的网络数据包错误数
select @@TOTAL_WRITE;--sqlserver执行的磁盘写入次数

? 输出语句

T-SQL支持输出语句,用于显示结果。常用输出语句有两种:

基本语法

print 变量或表达式
select 变量或表达式

示例

select 1 + 2;
select @@language;
select user_name();
 
print 1 + 2;
print @@language;
print user_name();

? 逻辑控制语句

1、 if-else判断语句

declare @age int;if(2>3)begin set @age=1;endelse beginset @age=2;endprint @age;结果 2
简单查询判断
declare @id char(10),
        @pid char(20),
        @name varchar(20);
set @name = ‘广州‘;
select @id = id from ab_area where areaName = @name;
select @pid = pid from ab_area where id = @id;
print @id + ‘#‘ + @pid;
 
if @pid > @id
    begin
        print @id + ‘%‘;
        select * from ab_area where pid like @id + ‘%‘;
    end
else
    begin
        print @id + ‘%‘;
        print @id + ‘#‘ + @pid;
        select * from ab_area where pid = @pid;
    end
go

2、 while…continue…break循环语句

基本语法

while <表达式>
begin
   <命令行或程序块>
   [break]
   [continue]
   <命令行或程序块>
end

示例

--while循环输出到
declare @i int;
    set @i = 1;
while (@i < 11)
    begin
        print @i;
        set @i = @i + 1;
    end
go
 
--while continue 输出到
declare @i int;
    set @i = 1;
while (@i < 11)
    begin                
        if (@i < 5)
            begin
                set @i = @i + 1;
                continue;        
            end
        print @i;
        set @i = @i + 1;                
    end
go
 
--while break 输出到
declare @i int;
    set @i = 1;
while (1 = 1)
    begin        
        print @i;        
        if (@i >= 5)
            begin
                set @i = @i + 1;
                break;        
            end        
        set @i = @i + 1;                
    end
go

3、 case

基本语法

case
   when <条件表达式> then <运算式>
   when <条件表达式> then <运算式>
   when <条件表达式> then <运算式>
   [else <运算式>]
end

示例

select *,
    case sex 
        when 1 then ‘男‘
        when 0 then ‘女‘    
        else ‘火星人‘
    end as ‘性别‘
from student;

4、 其他语句

批处理语句go
Use master
Go
 
延时执行,类似于定时器、休眠等
waitfor delay ‘00:00:03‘;--定时三秒后执行
print ‘定时三秒后执行‘;
时间: 2024-10-19 09:29:57

Transact—SQL的相关文章

SQL SERVER 简介及应用 - 数据库系统原理

SQL SERVER 是一个分布式的关系型数据库管理系统(RDBMS),具有客户 - 服务器体系结构,一般发行的版本有企业版.标准版.个人版.开发版. SQL SERVER 提供的服务 MS SQL Server:运行 SQL Server 的服务. SQL Server Agent:管理 SQL Server 周期性行为的安排,并在发生错误时通知系统管理员. Microsoft Server Service:提供一个全文本索引和搜索引擎. MS DTC:管理包含不同数据源的事务. SQL SE

SQL Server数据库学习总结

经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的 一图胜"十"言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数据库有了一些认识.  数据库基本是由表,关系,操作组成:对于初学者首先要学的:  1.数据库是如何存储数据的  表,约束,触发器  2.数据库是如何操作数据的  insert,update,delete T-sql 函数 存储过程 触发器  3.数据库是如何显示数据的  select SQLSer

转自高手关于SQL 锁的叙述。。(nolock,rowlock,tablock,xlock,paglock)

锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: [丢失更新]A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 [脏读]A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致 [不可重复读]A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致 并发控制的主要方法是封锁,锁就是在一段时间

SQL Server DML(UPDATE、INSERT、DELETE)常见用法(一)

1.引言 T-SQL(Transact Structured Query Language)是标准的SQL的扩展,是程序和SQL Server沟通的主要语言. T-SQL语言主要由以下几部分组成: 数据定义语言(DDL):用来建立数据库.数据库对象等,如CREATE TABLE.DROP TABLE等. 数据控制语言(DCL):控制数据库的存取许可.权限等,如GRANT等. 数据操纵语言(DML):用于插入.修改.删除和查询数据库中数据,如SELECT.INSERT.UPDATE.DELETE等

SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法

将以下代码存为OpenSqlServerPort.bat文件: netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP localport=80 @echo =========  SQL Server Ports  =================== @echo Enabling SQLServer default instance port 1433 nets

SQL SERVER CURSOR游标的使用(转载)

一:认识游标 游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集. 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合. 游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录. 二:游标的基本形式 声明游标:形式1DECLARE cursor_name [INSENSITIVE] [SCROLL] CURS

SQL Server基础知识三十三问 (15-21)

15. 存储过程可以调用自己么, 或者说可能有递归的存储过程么? SP nesting最多可以到多少层? 答: 可以的. 因为Transact-SQL 支持递归, 你可以编写可以调用自己的存储过程. 敌对可以被定义为一种解决问题的方法, 其中问题的解决是通过不断的对问题的子集调用自己而达成的. 当一个存储过程调用另一个存储过程或执行CLR的routine, type, 或aggregate时, 就会形成嵌套(nest). 你最多可以嵌套存储过程或托管代码的层级为32层.   16. 什么是log

通往t - sql的阶梯:超越基本级别6:使用CASE表达式和IIF函数

摘要:此文章转自: http://www.sqlservercentral.com/articles/Stairway+Series/108723/ Stairway to T-SQL: Beyond The Basics Level 6: Using the CASE Expression and IIF Function 通往t - sql的阶梯:超越基本级别6:使用CASE表达式和IIF函数 By Gregory Larsen, 2016/04/20 (first published: 2

#翻译#通往SQL Server安全级别2的阶梯:身份验证; 唐?吉利; 原文链接:Stairway to SQL Server Security Level 2: Authentication http://www.sqlservercentral.com/articles/Stairway+Series/109975/

这篇文章是楼梯系列的一部分:通往SQL Server安全的阶梯 SQL Server拥有您需要的所有东西来保护您的服务器和数据以抵御今天的复杂攻击.但是在您能够有效地使用这些安全特性之前,您需要了解您所面临的威胁和一些基本的安全概念.第一个阶梯级提供了一个基础,这样您就可以充分利用SQL服务器的安全特性,而不必浪费时间来防止对数据的特定威胁. 身份验证是验证一个君主国--一个需要访问SQL Server数据库的用户或进程--是谁或它声称是什么的过程.一个主体需要唯一的标识,以便SQL Serve