扩大
缩小
  

九、T-SQL编程

通过Sql语法来完成业务的处理,执行编写好的sql语句,就可以完成业务处理。

变量

SQL Server中变量分为: 局部变量 和 全局变量

局部变量

局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。在批处理和脚本中变
量可以有如下用途:作为计数器计算循环执行的次数或控制循环执行的次数,保存数据值供控制流语句
测试,以及保存由存储过程代码返回的数据值或者函数返回值。
注意:数据类型不可以是TEXT、NTEXT、IMAGE类型,局部变量被引用时要在其名称前加上标志 "@",如果
不为局部变量赋值,则默认赋值为null
定义变量:
declare @text varchar(20); --(变量名开始必须是@)
赋值:
--方法1:
set @text = '你好' --(不推荐)
--方法2:
select @text = 'hello'
输出内容
print @text
方法1:
select @text --映射到结果集
select '测试一下~'
方法2:
print @text --打印到消息框
print '测试一下~'

全局变量

@@CONNECTIONS 返回SQL Server自上次启动以来尝试的连接数,无论连接是成功还是失败
@@CPU_BUSY 返回SQL Server自上次启动后的工作时间。
其结果以CPU时间增量或“滴答数”来表示,此值为CPU工作时间的累积值,因此,可能会超出实际
占用CPU的时间。
乘以@@TIMETICKS即可转换为微秒。
@@CURSOR_ROWS 返回连接的数据库上打开的上一个游标中的当前限定行的数目,为了提高性能。
SQL Server可异步填充大型键集和静态游标。可调用@@CURSOR_ROWS以确定当其被调用时检索了游标
符合条件的行数。
@@DATEFIRST 针对会话返回 SET DATEFIRST的当前值。
@@DBTS 返回当前数据库的当前 timestamp 数据类型的值。这一时间戳值在数据库中必须是唯一的。
@@ERROR 返回执行的上一个Transact-SQL语句出现错误时对应的错误编号。
@@FETCH_STATUS 返回针对连接的数据库当前打开的任何游标,发出的上一条游标FETCH语句的状态。
@@IDENTITY 返回插入到数据表的IDENTITY列的最后一个值。
@@IDLE 返回SQL Server自上次启动后的空闲时间。结果以CPU时间增量或“时钟周期”来表示,是所有的累
积值
因此该值可能超过实际经过的时间。乘以@@TIMETICKS即可转换为微秒。
@@IO_BUSY 返回自 SQL Server最近一次启动以来,SQL Server已经用于执行输入和输出操作的时间。
其结果是CPU时间增量(时钟周期),是CPU执行操作的累积值,这个值可能超过实际消逝的时间。
乘以@@TIMETICKS即可转换为微秒。
@@LANGID 返回当前使用的语言对应的本地语言标识符(ID)。
@@LANGUAGE 返回当前所用语言的名称。
  @@LOCK_TIMEOUT 返回当前会话的锁定超时的设置值(单位为毫秒)。

  @@MAX_CONNECTIONS 返回 SQL Server 实例允许同时进行的最大用户连接数。返回的数值不一定是当前配置的数

  值。

@@MAX_PRECISION 按照服务器中的当前设置,返回decimal和numeric 数据类型所用的精度级别。默认情况下,最

大精度级别38.

@@NESTLEVEL 返回在本地服务器上执行的当前存储过程的嵌套级别(初始值为0).

@@OPTIONS 返回有关当前SET选项的信息。

@@PACK_RECEIVED 返回 SQL Server 自上次启动后从网络读取的输入数据包数。

@@PACK_SENT 返回SQL Server自上次启动后写入网络的输出数据包个数。

@@PACKET_ERRORS 返回自上次启动 SQL Server后,在SQL Server 连接上发生的网络数据包错误数。

@@ROWCOUNT 返回上一次语句影响的数据行的行数。

@@PROCID 返回 Transact-SQL当前模块的对象标识符(ID).Transact-SQL模块可以是存储过程、用户定义

函数或触发器。

不能在CLR模块或进程内的数据访问接口中指定@@PROCID.

@@SERVERNAME 返回运行SQL Server的本地服务器的名称。

@@SERVICENAME 返回SQL Server正在运行的注册表项的名称。若当前实例为默认实例,则@@SERVICENAME返回

MSSQLSERVER;

若当前实例是命名实例,则该函数返回该实例名。

@@SPID 返回当前用户进程的会话ID.

@@TEXTSIZE 返回SET语句的TEXTSIZE选项的当前值,

它指定 SELECT 语句返回的text或image数据类型的最大长度,其单位为字节。

@@TIMETICKS 返回每个时钟周期的微秒数。

@@TOTAL_ERRORS 返回自上次启动SQL Server之后,SQL Server所遇到的磁盘写入错误数。

@@TOTAL_READ 返回 SQL Server自上次启动后,由SQL Server 读取(非缓存读取)的磁盘的数目。

@@TOTAL_WRITE 返回自上次启动SQL Server以来,SQL Server所执行的磁盘写入数。

@@TRANCOUNT 返回当前连接的活动事务数。

@@VERSION 返回当前安装的日期、版本和处理器类型。

运算符

比较运算符

SELECT *
FROM [ZhaoxiEdu].[dbo].[Company] where Createtime>
where Createtime<
where Createtime=
where Createtime>=
where Createtime<=
where Createtime<>或!=
where Createtime!>
where Createtime!<

逻辑运算符

 

连接运算符

加号(+)是字符串串接运算符,可以将两个或两个以上字符串合并串接成一个字符串。其他所有字符串
操作则可以调用字符串函数(如SUBSTRING())进行处理。默认情况下,对于varchar数据类型的数据,
在INSERT或赋值语句中,空的字符串将被解释为空字符串。在串接varchar、char或text数据类型的数
据时,空的字符串被解释为空字符串。例如:'abc'+"+'def'被存储为'abcdef'

流程控制

批处理
一条或多条SQL语句的集合,一个批作为一个字符串交给服务器去执行。
使用GO表示批,一个批出现错误,批中的语句都将会被回滚。
GO
-- SQL语句
GO
分支结构
declare @a int;
declare @b int;
select @a=4;
select @b=2;
if @a>@b ---(不用写())
begin
print '@a的值大于@b的值'
end
else
begin
print '@b的值大于@a的值'
end
begin end 相当于{}

循环

循环语句——类似于C#中的循环,循环四要素:初始条件,循环条件,循环体,状态改变循环退出
declare @aa int ;
select @aa=1; --初始条件
while @aa<10
begin
select @aa as 结果; --循环体
print '结果为:'+ convert(varchar(10),@aa)
select @aa=@aa+1; --状态改变
end

自定义错误处理

可以在CATCH中使用以下语句抛出错误:
THROW {error_number | @local_variable},
{ message | @local_variable },
{ state | @local_variable };
posted @ 2023-09-18 09:12  风筝遇上风  阅读(28)  评论(0编辑  收藏  举报