SQLServer数据库编程基础知识

一、Begin Try & Begin Catch

begin try
select 2/0
end try
begin catch
select error_number() as error_number ,
error_message() as error_message,
error_state() as error_state,
error_severity() as error_severity
end catch

二、@@trancount

每一次Begin Transaction都会引起@@TranCount加1。而每一次Commit Transaction都会使@@TranCount减1,而RollBack Transaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,而使@@TranCount置0;

例如:

Begin Transaction -- @@TranCount = 1
BeginTransaction -- @@TranCount = 2
BeginTransaction -- @@TranCount = 3
Commit Transaction -- @@TranCount = 2
Commit Transaction -- @@TranCount = 1
Commit Transaction -- @@TranCount = 0
如果出现错误ROLLBACK TRANSACTION
则:
Begin Transaction -- @@TranCount = 1
BeginTransaction -- @@TranCount = 2
BeginTransaction -- @@TranCount = 3
ROLLBACK TRANSACTION -- @@TranCount = 0

三、SET XACT_ABORT ON的两种回滚方式

  • 总体作为一个事务,整体提交或整体回滚,格式为:

    SET XACT_ABORT ON
    BEGIN TRAN
        --要执行的语句
    COMMIT TRAN
    GO
    
  • 每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚,格式为:

    SET XACT_ABORT ON
    BEGIN
        --要执行的语句
    END
    GO
    

四、@@FETCH_STATUS

@@fetch_status是SQLServer的一个全局变量,其值由数据库管理系统管理,值的改变是通过fetch next from触发的
记录值有三种,分别为:
0 FETCH 数据提取成功

-1 FETCH 没取到数据,游标中的数据已经取完

-2 被提取的行不存在,进程被杀、意外中断

五、临时表

临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。

临时表有两种类型:

  • 本地临时表

    以一个井号 (#) 开头的那些表名。只有在创建本地临时表的连接上才能看到这些表。

  • 全局临时表

    以两个井号 (##) 开头的那些表名。在所有连接上都能看到全局临时表。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去

----应用本地临时表 
declare @sql varchar(100) 
set @sql='select ''123'' as a,''abasdf'' as b into #t' 
exec(@sql) 
select * from #t 
/*发现不能正确显示临时表的数据 提示: 对象名 '#t' 无效。 */ 

----修改为全局临时表 
declare @sql varchar(100) 
set @sql='select ''123'' as a,''abasdf'' as b into ##t' 
exec(@sql) 
select * from ##t drop table ##t 
/*可以正确显示临时表的数据 */

原因分析:

exec(@sql) 相当于重新建立一个数据库对话,所以对于本地临时表,使用exec(@sql)创建临时表,
在exec外部不能正确访问;而使用全局临时表就ok了

六、查询所有的触发器

select * from sysobjects where xtype='TR'

七、查询存在关系

if(exists(select * from list where @dlid=id))   ----一般是判断约束

八、查看表帮助信息

exec sp_help StudentsA

九、判断表是否存在

IF NOT exists (select 1
from  sysobjects
where  id = object_id('dbo.StudentsA')
and   type = 'U')

SELECT OBJECT_ID('TEMPDB..#vehicles ')  ----临时表
IF OBJECT_ID('TEMPDB..#vehicles ') IS NOT NULL
			DROP TABLE #vehicles

十、截取

SELECT  substring('12345',1,len('12345') -1 )

十一、DateAdd函数

SELECT dateadd(YEAR,1,GetDate());
SELECT dateadd(MONTH,1,GetDate());
SELECT dateadd(DAY,1,GetDate());

SELECT dateadd(HOUR,1,GetDate());
SELECT dateadd(MINUTE,1,GetDate());
SELECT dateadd(SECOND,1,GetDate());

十二、列操作

--添加列
alter table [dbo].[StudentsA] ADD  [note] varchar(200)

---修改列
alter table [dbo].[StudentsA] alter column [phone_number] varchar(11)

alter table [dbo].[StudentsA] alter column  [note] varchar(200) 

--修改列名称
EXEC sp_rename 'StudentsA.[note]', 'notes', 'COLUMN'

---先删除再新增
alter table StudentsA drop column note --删除这一列
alter table StudentsA add notes varchar(20) not null --新添加一列

posted @   码农阿亮  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
历史上的今天:
2021-12-16 SqlServer 2019卸载干净
点击右上角即可分享
微信分享提示