灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3698回复:0

[SQL Server]SQL Server T-SQL编程

楼主#
更多 发布于:2013-06-17 11:09
SQL Server T-SQL编程
 
Transact-SQL(事务-结构化查询语言)
 
 由一条或多条T-SQL语句组成。
 
一、T-SQL基础
 
1、结束批处理
 
默认情况下,批处理分隔关键字为go
 
注:go 必须独占一行,不可包括其他任何字符 (包括注释)
 
不过也可在选项中自定义批处理分隔符,结束批处理时,将销毁该批处理的所有局部
 
变量,临时表和游标
 
2、切换数据库
 
use 数据库名
 
3、执行批处理
 
F5
 
4、执行存储过程
 
Exec 存储过程名 参数
 
二、格式化T-SQL代码
 
1、结束语句
 
ANSI SQL标准规定在每个命令末尾使用分号来结束它,但分号是可选的。
 
但有一些硬性规则
 
 a、try and 后不可加分号
 
 b、if条件后不可加分号
 
 c、CTE之前必须添加分号
 
2、续行
 
可以使用换行、空格
 
3、注释
 
单行:--
 
多行:/*   */ 使用这种注释的特点:可选择注释中的SQL语句执行,测试。
 
而无需首先取消注释。
 
4、调试T-SQL
 
使用select print
 
waitfor  delay  ‘00:00:02’暂停2秒执行
 
三、变量
 
T-SQL变量是使用命令declare创建的
 

 
declare 变量名1 数据类型,变量名2 数据类型
 
注:可用的数据类型包括创建表时可用的数据类型以及数据类型table和SQLVariant。
 
1、变量的默认值和作用域
 
变量的作用域(可用范围和生命周期)为当前批处理。
 
新声明的变量的默认值为null,在使用前需初始化。
 
go用来分隔不同的批处理。
 
2、变量的赋值
 
使用set命令和select命令
 
set命令和select命令都可以将表达式的值赋给变量
 
主要区别:
 
select可以从数据源(如表,子查询或视图)检索数据,
 
set只能获取表达式的值。
 
注:如果select语句检索多行,那么只有最后一行的数据将被赋给变量,而不会
 
导致错误。
 
如:
 
declare @tempid int,@name varchar(20)
 
set @tempid=20
 
select @name=truename from yuangong where id=3
 
select @name,@tempid
 
注:如果select 语句没有返回任何行,变量的值将不会受影响。
 
3、在SQL查询中,使用变量
 
在SQL查询中,可以使用表达式的地方都可以使用变量。
 
如:
 
declare @tempid int
 
set @tempid=1
 
select * from yuangong where id=@tempid
 
四、流程控制
 
1、if条件语句
 
格式:
 
if condintion
 
statement;
 
注:只可控制单个命令(一条语句)
 
1.1 begin/end
 
相当于程序中的 {  }
 
可以让多条命令在if的控制下执行。
 
格式:
 
if condition
 
begin
 
multiple lines;
 
end
 
1.2 if Exists()
 
在括号中使用select语句查询时,选择特定列,还是全部列,没有本质的不同
 
,但选择全部列时SQL Server能够根据索引选择最佳的列。
 
1.3if  else
 
if condition
 
...
 
else
 
...
 
2、while
 
while condition
 
begin
 
...
 
end
 
中间可使用break和continue
 
3、goto
 
label1 :
 
...
 
   goto label1
 
五、使用代码获取SQL Server信息
 
1、sp_help
 
sp_help及其变体返回有关服务器、数据库、对象、连接等方面的信息
 
如:
 
sp_help 表名
 
返回表的结构等具体信息:
 
如:
 
sp_help yuangong
 
结果:
 
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
 
id int no 4 10    0     no (n/a) (n/a) NULL
 
bmID int no 4 10    0     no (n/a) (n/a) NULL
 
zwID int no 4 10    0     no (n/a) (n/a) NULL
 
username varchar no 50             no no no Chinese_PRC_CI_AS
 
pwd varchar no 50             no no no Chinese_PRC_CI_AS
 
truename varchar no 50             yes no yes Chinese_PRC_CI_AS
 
sex varchar no 10             yes no yes Chinese_PRC_CI_AS
 
birthday datetime no 8             yes (n/a) (n/a) NULL
 
tele varchar no 50             yes no yes Chinese_PRC_CI_AS
 
note text no 16             yes (n/a) (n/a) Chinese_PRC_CI_AS
 
rzsj datetime no 8             yes (n/a) (n/a) NULL
 
lzsj datetime no 8             yes (n/a) (n/a) NULL
 
isdelete int no 4 10    0     yes (n/a) (n/a) NULL
 
2、全局变量
 
以@@打头
 
全局变量
全局变量是SQL Server系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。
 
使用全局变量时应该注意以下几点:
①全局变量不是由用户的程序定义的,它们是在服务器级定义的。
②用户只能使用预先定义的全局变量。
③引用全局变量时,必须以标记符“@@”开头。
④局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。
 
select @@ERROR 返回最后执行的 Transact-SQL 语句的错误代码(integer) (0,表示
 
没错误;1,表示有错误)
 
select APP_NAME ( ) as w --当前会话的应用程序
 
select @@IDENTITY   --返回最后插入的标识值
select USER_NAME()    --返回用户数据库用户名
 
SELECT @@CONNECTIONS  --返回自上次SQL启动以来连接或试图连接的次数。
SELECT GETDATE() --当前时间
SELECT @@cpu_BUSY/100  --返回自上次启动SQL 以来 CPU 的工作时间,单位为毫
 

 
USE tempdb SELECT @@DBTS  as w  --为当前数据库返回当前 timestamp 数据类型
 
的值。这一 timestamp 值保证在数据库中是唯一的。
select @@IDENTITY as w --返回最后插入的标识值
SELECT @@IDLE  as w  --返回SQL自上次启动后闲置的时间,单位为毫秒
SELECT @@IO_BUSY AS w   --返回SQL自上次启动后用于执行输入和输出操作的时间,
 
单位为毫秒
SELECT @@LANGID AS w   --返回当前所使用语言的本地语言标识符(ID)。
SELECT @@LANGUAGE AS w   --返回当前使用的语言名
SELECT @@LOCK_TIMEOUT as w  --当前会话的当前锁超时设置,单位为毫秒。
SELECT @@MAX_CONNECTIONS  as w  --返回SQL上允许的同时用户连接的最大数。
 
返回的数不必为当前配置的数值
EXEC sp_configure  --显示当前服务器的全局配置设置
SELECT @@MAX_PRECISION as w --返回 decimal 和 numeric 数据类型所用的精度
 
级别,即该服务器中当前设置的精度。默认最大精度38。
select @@OPTIONS  as w  --返回当前 SET 选项的信息。
SELECT @@PACK_RECEIVED as w  --返回SQL自启动后从网络上读取的输入数据包数
 
目。
SELECT @@PACK_SENT as w  --返回SQ自上次启动后写到网络上的输出数据包数目。
 
 
SELECT @@PACKET_ERRORS as w  --返回自SQL启动后,在SQL连接上发生的网络数
 
据包错误数。
SELECT @@SERVERNAME as w --返回运行SQL服务器名称。
SELECT @@SERVICENAME  as w --返回SQL正在其下运行的注册表键名
SELECT @@TIMETICKS  as w --返回SQL服务器一刻度的微秒数
SELECT @@TOTAL_ERRORS AS w  --返回 SQL服务器自启动后,所遇到的磁盘读/写错
 
误数。
SELECT @@TOTAL_READ  as w  --返回 SQL服务器自启动后读取磁盘的次数。
SELECT @@TOTAL_WRITE as w  --返回SQL服务器自启动后写入磁盘的次数。
SELECT @@TRANCOUNT  as w  --返回当前连接的活动事务数。
SELECT @@VERSION as w  --返回SQL服务器安装的日期、版本和处理器类型。
 
六、临时表和表变量
 
1、局部临时表
 
以#开头
 
Create table #名称
 
(
 
数据列定义
 
)
 
注:临时表的生命周期很短,只在相应的创建中可见(在同一个新建查询中可见)
 
2、全局临时表
 
所有用户都可以引用全局临时表,仅当最后一个引用它的会话结束后才删除
 
以##开头,在别的新建查询中也可见,只要创建的那个一会话结束,就不可
 
再访问。
 
3、表变量
 
表变量的作用域和生命周期与局部变量相同,
 
对表变量有如下限制
 
a、不能使用语法select * into 或 insert into @tablename exec 来创建表变量
 
b、不能在函数中创建表变量
 
c、不可使用外键和check约束
 
d、不可有依据表变量的对象,如:触发器和外键作为变量来声明。
 
格式:
 
declare @表名 table
 
(
 
列定义
 
)
 
在同一个批处理中可对这个表变量操作
 
六、动态SQL
 
七、错误处理
 
7.1try ... catch
 
begin try
 
...放正常执行的代码
 
end try
 
begin catch
 
...如果发生错误执行这里的代码。
 
end  catch
 
错误函数:
 
error_message() 错误消息文本
 
error_number() 错误编号
 
error_procedure() 发生错误的存储过程或解发器的名称
 
error_severity() 错误的严重程度
 
error_state() 错误的状态

喜欢0 评分0
游客

返回顶部