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 --新添加一列
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/16987929.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2021-12-16 SqlServer 2019卸载干净