由于之前使用 Linq to Sql来操作数据库,对于数据库的存储过程、函数等比较薄弱。乘着自己闲着的时候,就百度自学了一点存储过程,以防以后要用。

基础通俗易懂的存储过程通过 存储过程学习 ,然后自己写了几个基础的存储过程方便自己了解他的语法。

ALTER PROCEDURE [dbo].[pro_study]
@name varchar(50)='huage', --输入参数//全局变量声明
@result varchar(10) OUTPUT --输出参数
AS
BEGIN
if(select COUNT(1) from t_student where Name=@name)>0
SET @result='存在'
ELSE
set @result='不存在'
END --这边是调用存储过程
--定义变量声明@result 然后输出
DECLARE @result varchar(10)
exec test_study 'hauge',@result output
PRINT @result--这边是直接给参数返回,不建议使用

对于这边的全局变量的输出,C#的调用方法如下:

  public static string DBExecutepParmOutput(CommandType cType, string cText)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = cType;
cmd.CommandText = cText;
SqlParameter[] parms ={
new SqlParameter("@name","huage"),
new SqlParameter("@result",SqlDbType.VarChar,)
};
parms[].Direction = ParameterDirection.Output;
cmd.Parameters.AddRange(parms);
conn.Open();
cmd.ExecuteScalar();
return parms[].Value + "";
}
}

这边是通过全局变量的传入,输出所需的结果集

ALTER PROCEDURE [dbo].[pro_study1]
@id int
AS
BEGIN
declare @result VARCHAR(20)
if(select COunt(1) from t_student where Id=@id)>0
set @result='存在'
ELSE set @result='不存在' SELECT @result
END

对于这边的局部变量(select)的输出,C#的调用方法如下:

   public static string DBExecuteScalar(CommandType cType, string cText, SqlParameter[] parms)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = cType;
cmd.CommandText = cText;
cmd.Parameters.AddRange(parms);
conn.Open();
var res = cmd.ExecuteScalar() + "";
return res;
}
}

下面是定义局部变量,并且赋值查询表,返回结果集合(C#调用就比较简单_就不展示了)

ALTER PROCEDURE [dbo].[pro_study2]
@id varchar(50)--//全局变量
AS --//as 前面的是全局变量,后面的是局部变量
DECLARE @name varchar(50) --//局部变量
set @name='huage'
BEGIN
set @id=1
select * from t_student where Name=@name
select * from t_student where Id=@id
END

下面是输出数据库里面内置函数的结果集:

ALTER PROCEDURE [dbo].[pro_rowcount]
AS
BEGIN
INSERT into t_student VALUES ('huage','','男神'),
('wudi','','女神') --begin...end 类似编程语言中的{} select @@rowcount --返回影响的行数
select @@identity --返回最近插入的标识列的Id
END

下面是使用游标循环数据库表的基本语法

ALTER PROCEDURE [dbo].[pro_youbiao]
AS
BEGIN
DECLARE @temp int,--定义的游标的变量
@error INT --记录错误
DECLARE m_cursor CURSOR FOR (select Id from t_student)--定义游标
OPEN m_cursor --打开游标
--开始循环游标变量--
FETCH NEXT FROM m_cursor into @temp
WHILE @@FETCH_Status=0 --返回被 FETCH语句执行的最后游标的状态--
--这边是对数据的操作
BEGIN--beging end 相当于C#中的{}
UPDATE t_student SET test=CONVERT(VARCHAR(10),@temp) where Id=@temp
set @error=@error+@@ERROR -- --记录每次运行sql后是否正确,0正确
FETCH next FROM m_cursor into @temp --转到下一个游标,没有会死循环
END
close m_cursor --关闭游标
deallocate m_cursor --释放游标 SELECT @error
END

最新文章

  1. java utils
  2. Java基础(1):Switch语句注意的5个地方
  3. c++ 11 多线程教学(1)
  4. UESTC_邱老师降临小行星 2015 UESTC Training for Search Algorithm & String<Problem B>
  5. python-MySQL库简单安装
  6. wamp无法登录phpmyadmin问题
  7. C#学习-接口的成员
  8. iOS原生实现二维码拉近放大
  9. Mongo安装与使用
  10. nuxt跨域
  11. 天气提醒邮件服务器(python + scrapy + yagmail)
  12. java中自定义注释@interface的用法
  13. Xampp单独升级某个软件
  14. iOS开发—音乐的播放
  15. jQuery.Form.js 异步提交表单使用总结
  16. 理解Java序列化
  17. JAVA RSA私钥 加密(签名) 对应 C# RSA私钥 加密(签名)
  18. AndroidManifest详解
  19. json批量设置DIV属性
  20. 12个有趣的 XSS Vector

热门文章

  1. C#遍历/反射 属性/字段
  2. jquery-pjax
  3. PAT_A1118#Birds in Forest
  4. iterm2 快捷键设置
  5. Ubuntu安装RTX2080显卡驱动
  6. [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)
  7. Mybatis配置之别名配置元素详述
  8. 3分钟实现小程序唤起微信支付 Laravel教程
  9. ubuntu 配置lamp
  10. lucene_08_solr导入数据库数据