条件表达是里面,可以使用一个只有一行一列的查询作为判断的一个根据
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
?
在使用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
?
存储过程:
- 存储过程SqlHelper:
-
存储过程-转账+事务
-
带参数的存储过程:
-
带返回值的存储过程:
-
带两个参数的存储过程:
-
存储过程-分页
自写的用于分页:
返回页码,可以用内置函数:--SELECT @pageCount=CEILING((COUNT(id)*1.0)/@pageSize) FROM dbo.Student
?
-
事务:
-
SqlHelper输出参数-存储过程: