4.sql进阶02(知识点)

条件表达是里面,可以使用一个只有一行一列的查询作为判断的一个根据

IF( (SELECT COUNT(id) FROM dbo.Student) >10)

BEGIN

PRINT ‘好多人啊‘

END

ELSE

begin

PRINT ‘人好少啊‘

END

?

?

输出参数

ALTER PROC usp_GetStu

@iid INT = 2,--有默认值的参数可以不传

@name nvarchar(10), --对于没有写默认值的参数,在调用的时候必须传递参数,

--在存储过程的参数被定义的时候,可以指定默认值

@totalCount int =0 OUTPUT--定义一个输出参数

AS

begin

SELECT * FROM dbo.Student WHERE Name=@name

SELECT * FROM dbo.Student WHERE id=@iid

SELECT @totalCount=COUNT(id) FROM dbo.Student

END

?

DECLARE @total INT =0

EXEC usp_GetStu @name=‘啊三‘,@totalCount=@total OUTPUT--指定一个变量给输出参数,

--在存储过程执行完毕以后,我们就可以通过变量得到数据的值了

SELECT @total

4.sql进阶02(知识点)

?

在使用SqlCommand 的时候,如果设置了CommandType属性,那么程序就会自动的按照SqlParameter的名字,给存储过程添加参数,在设置了属性后sql语句就不用加上"EXEC"

SqlCommand cmd = new SqlCommand("usp_ZZ", conn);

cmd.CommandType = CommandType.StoredProcedure;

SqlParameter sp = new SqlParameter();

sp.ParameterName = "@mon";

sp.SqlDbType = SqlDbType.Int;

sp.Value = mon;

?

cmd.Parameters.Add(sp);

?

不指定CommandType可以就当做一个字符串执行

SqlCommand cmd = new SqlCommand("EXEC usp_ZZ @mon", conn);

?

标识一个参数的方向 为output就是说这个参数是一个输出参数

sp.Direction = ParameterDirection.Output;

取得输出参数的值 ,注意,需要在command对象执行之后才能取值

MessageBox.Show(sp.Value.ToString());

?

?

触发器

?

触发器最难的是在与根据业务需求,写出触发器里面需要执行的sql语句

触发器本身并不难

After 和for 都是在增删改执行的时候执行另外的sql语句

?

Instead of 是,取代原来的操作

?

--创建一个新增触发器

CREATE TRIGGER tgforClassesOnInsert ON Classes

AFTER INSERT

as

begin

PRINT ‘新增了一行数据‘

--INSERT INTO log (操作的表,执行时间,哪个用户)

END

--创建一个删除触发器

CREATE TRIGGER tgforClassesOnDelete ON Classes

AFTER DELETE

as

begin

PRINT ‘删除了一行数据‘

END

--创建一个修改触发器

CREATE TRIGGER tgForClassesOnUpdate ON Classes

AFTER UPDATE

as

begin

PRINT ‘修改了一行数据‘

END

?

--*********FOR

CREATE TRIGGER tgclassupdate ON classes

FOR????update

as

begin

PRINT ‘for的更新‘

END

CREATE TRIGGER tgclassinsert ON classes

FOR????INSERT

as

begin

PRINT ‘for的插入‘

END

CREATE TRIGGER tgclassdelete ON classes

FOR????DELETE

as

begin

PRINT ‘for的删除‘

END

--************instead OF

CREATE TRIGGER tgclassesIinsert ON classes

instead OF INSERT

as

begin

PRINT ‘instead ++ INSERT‘

END

CREATE TRIGGER tgclassesIupdate ON classes

instead OF update

as

begin

PRINT ‘instead ++ update‘

END

CREATE TRIGGER tgclassesIdelete ON classes

instead OF delete

as

begin

PRINT ‘instead ++ delete‘

END

?

存储过程:

  1. 存储过程SqlHelper:

4.sql进阶02(知识点)

  1. 存储过程-转账+事务

    4.sql进阶02(知识点)

  2. 带参数的存储过程:

    4.sql进阶02(知识点)

  3. 带返回值的存储过程:

    4.sql进阶02(知识点)

  4. 带两个参数的存储过程:

    4.sql进阶02(知识点)

  5. 存储过程-分页

    4.sql进阶02(知识点)

自写的用于分页:

返回页码,可以用内置函数:--SELECT @pageCount=CEILING((COUNT(id)*1.0)/@pageSize) FROM dbo.Student

?

4.sql进阶02(知识点)

  1. 事务:

    4.sql进阶02(知识点)

  2. SqlHelper输出参数-存储过程:

    4.sql进阶02(知识点)

4.sql进阶02(知识点)

上一篇:【转载】Oracle ACE总监对Oracle 12c的一些新特性总结


下一篇:数据库 字符串连接函数