九、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 };