条件表达是里面,可以使用一个只有一行一列的查询作为判断的一个根据
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输出参数-存储过程: