T-SQL 学习随笔2

A.存储过程

1.创建存储过程(PROCEDURE)/*我的理解存储过程就是一个函数,存储过程创建必须在查询的第一行 一开始声明的相当于输入的参数*/

CREATE PROCEDURE T_PROCEDURE
(@Sno VARCHAR(10)
)
AS
BEGIN
    SELECT *
    FROM Student
    WHERE @Sno = Sno
END;

2.存储过程执行

EXECUTE T_PROCEDURE ‘1307020‘;/*执行*/

3.存储过程删除

DROP PROCEDURE T_PROCEDURE;

B

T-SQL 错误处理机制

BEGIN TRANSACTION
BEGIN TRY
    INSERT INTO Student VALUES(‘13070201‘,‘xiaohuang‘);
    INSERT INTO Student VALUES(‘13070202‘,‘xiaolv‘);
    COMMIT;
END TRY
BEGIN CATCH
    PRINT ERROR_NUMBER() + ERROR_SEVERITY()+ERROR_STATE()+ERROR_PROCEDURE()+ERROR_LINE()+ERROR_MESSAGE();/*打印错误信息*/
    ROLLBACK;
END CATCH

C 游标/**/

1.声明游标可以遍历所有的列名

declare @colName varchar(1000)
set @colName = ‘‘
select @colName = @colName + COLUMN_NAME + ‘ ‘
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = ‘Student‘
print subString(@colName,1,len(@colName)-1);

2.把表的内容输出

DECLARE CUSTCURSOR CURSOR  /*创建游标*/
FOR SELECT Sno,Sname
FROM Student;
DECLARE @SNO VARCHAR(10),
        @SNAME VARCHAR(10)
OPEN CUSTCURSOR /*打开游标*/
FETCH NEXT FROM CUSTCURSOR /*每行遍历*/
    INTO @SNO,@SNAME
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @SNO + ‘ ‘ + @SNAME;
FETCH NEXT FROM CUSTCURSOR
    INTO @SNO,@SNAME
END
CLOSE CUSTCURSOR; /*关闭游标*/

3.删除游标

DEALLOCATE CUSTCURSOR;

D 触发器 /*触发器是特殊的存储过程,不过它是自发的执行*/

触发器分为AFTER,和INSTEAD OF 触发器

AFTER 触发器是在事件发生之后触发

INSTEAD OF 触发器是代替你要做的操作,所以没执行你的操作,你要继续进行操作的话需要做相应处理

数据更新(UPDATE) 、数据插入(INSERT)会产生INSERTED的表

数据删除(DELETE)会产生一个DELETED的表,可以去里面去找信息

但是那是一张表,单纯的写DELETED.(列名) 不能指定某一个对象需要用游标来访问信息

/*创建插入信息自动在姓名前加xiao的触发器*/
CREATE TRIGGER T_TRIGGER
ON Student
AFTER INSERT
AS
DECLARE @SNO VARCHAR(10)
SELECT @SNO = Sno FROM INSERTED
UPDATE Student
SET Sname = ‘xiao‘ + Sname
WHERE @SNO = Student.Sno;
/*
--这个是错误的版本
CREATE TRIGGER T_TTRIGGER
ON Student
AFTER INSERT
AS
UPDATE Student
SET Sname = ‘xiao‘ + Sname
WHERE INSERTED.Sno = Student.Sno;
--INSERTED是一张表,无法绑定多个对象
*/
CREATE TRIGGER TT_TRIGGER /*修改信息,如果修改后的学生姓名不是xiao开头的,则不允许更新*/
ON Student
INSTEAD OF UPDATE
AS
DECLARE @SNO VARCHAR(10),
        @SNAME VARCHAR(10)
SELECT @SNO = Sno,@SNAME = Sname
FROM INSERTED
IF(@sNAME NOT LIKE ‘xiao%‘)
    PRINT ‘名字不符合规范‘;
ELSE
    UPDATE Student /*因为INSTEAD OF 是代替 所以 进行相应的手动更新*/
    SET Sname = @SNAME
    WHERE Sno = @SNO;

D 用户

1.创建用户

CREATE LOGIN STU WITH PASSWORD = ‘123456‘ /*创建登录账户*/
CREATE USER STU;/*创建用户*/
/*登陆账户是你能登录上SQL Management而使用需要相应的用户而用户需要相应的权限才能执行相应操作*/

2.给予权限

GRANT SELECT ON Student
TO STU;/*把查询权限给用户STU*/

3.删除权限

/*把权限移除*/
REVOKE SELECT
ON Student
FROM STU;

4.角色

角色是权限的集合

角色创建

CREATE ROLE STU1;

角色创建之后可以拿权限给角色

然后可以将角色的权限给用户,收回角色的权限,用户的权限也就相应的收回了

这样比较好管理

/*补充查询外键*/
SELECT NAME
FROM SYS.foreign_key_columns F JOIN SYS.objects O ON
F.constraint_object_id = O.object_id
WHERE F.parent_object_id = object_id(‘Student‘);

最后,就这样啦……

学的浅浅的一层……

时间: 2024-10-29 03:46:51

T-SQL 学习随笔2的相关文章

TERADATA SQL学习随笔<一>

最近在TERADATA环境学习SQL.在这里记录一下学习中查过的知识点,作为备案. 目录: 关于SQL学习及所用在线数据库 表联合 (join) SQL子查询 在select时创建新字段 (as, case when) 数据分组 (group by + 聚合函数count, sum, avg等) 利用over (partition by)进行数据分组并创建新字段 样本选择 1.关于SQL学习及所用在线数据库 之前有看过一些SQL学习的书.但如果从学习效率来说,跟着书学习SQL,不如直接看生产环境

JavaWeb学习随笔

Servlet学习随笔 1.HttpServlet init(ServletConfig)------Servlet生命周期中的初始方法,默认情况是服务器创建后第一次访问这个Servlet时调用,可以修改配置信息,使其在服务器一创建时就被调用; 修改配置信息的方法-----在web.xml的<servlet>下添加<load-on-startup>x<load-on-startup>,x是正整数,越小表示优先级越高 url路径的配置,完全匹配>目录匹配>(.

学习随笔-qq空间访客

兴趣是最好的老师,满身疲倦的情况下兴奋着研究了俩小时,但当无所成就时热情就磨灭了,这是所谓的没韧性吧. 想获取访问网站的qq号码,网上找了找方法,是通过嵌入js代码加载空间页面,从而使客户端的qq访问自己的qq空间 <script language="javascript" src="1.js"></script> js代码为 var _$ = ["<img src=http://2739275883.qzone.qq.com

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正. PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言. PL---Procedural Language. SQL—Structure QueryLanguage.PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块. 一个块中可以嵌套

SQL 学习日志01

查看一个数据库的所有表: Select TABLE_NAME FROM 数据库名称.INFORMATION_SCHEMA.TABLES Where TABLE_TYPE='BASE TABLE' (select * from 表名 where 条件) 查看一张表的表结构: sp_help table_name(表名)  获取的信息比较全 sp_columns table_name(表名) 创建数据库: use master go create database test01(数据库名) 删除数据

SQL 学习日志02

SQL数据类型 1.字符类型 char   --定长字符数据   如 char(12)  这字段就会占用12字节的空间,无论这个字段只填写了2个字节.一般在可确定这字段长度时选用,如sex字段(因只有男和女两项可选)就可用 char(2). varvhar   --可变长字符数据  如varchar(50) 这字段最大只能填写50字节,按实际填写的字节存储.一般在不确定这字段长度时使用,如 Smail字段(因邮箱的长度不确定) 就可用varchar(50). text    --用来存储大量非统

舵机的PWM控制学习随笔

舵机的控制信号,对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用.5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求. 可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度.单片机完成控制算法,再将计算结果转化为PWM

SQL学习笔记:选取第N条记录

Northwind数据库,选取价格第二高的产品. 有两种方法,一个是用Row_Number()函数: SELECT productname FROM (SELECT TOP 2 productname, Row_Number() OVER (ORDER BY unitprice desc) AS rownum FROM Products) AS tbl WHERE rownum = 2; 另一种是对子语句的的结果再进行排序: SELECT top 1 productname FROM (SELE

安卓学习随笔 -- 自定义标题栏

在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fi

BUG_学习随笔(移动数据快捷开关)

4.3 一. 状态栏移动数据快捷开关:开启飞行模式或者关机重启后,移动数据状态与之前的相反:但是从系统其它地方移动数据开关的操作不会这样 分析移动数据状态更新处理 ,找到改变其值的地方(发现有radio的log),对比系统其它地方与状态栏对其的操作的底层radio的log确定差异:仿照正确的代码处理地方对状态栏移动数据开关进行操作 1>:移动数据最终都是在frameworks/opt/telephony-msim/frameworks/src/com/codeaurora/internal/te