由于之前使用 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

SQL server存储过程学习的更多相关文章

  1. SQL server 存储过程学习

    一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @user ...

  2. 关于SQL SERVER数据库学习总结

    对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...

  3. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  4. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  5. SQL Server 存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  6. SQL SERVER XML 学习总结

    SQL  SERVER  XML  学习总结 最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的Service Broker技术,在熟悉使用该技术的同时,又用到了Sql s ...

  7. 14、SQL Server 存储过程

    SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...

  8. (摘录)SQL Server 存储过程

    文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...

  9. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

随机推荐

  1. Gartner2017年数据科学领域最酷供应商出炉,实至名归

    文 | 帆软数据应用研究院 水手哥 更多大数据资讯和企业案例可关注 :知乎专栏<帆软数据应用研究院> 近日,Gartner公布了2017年度数据科学和机器学习领域的最酷供应商,清一色的美国 ...

  2. c#如何用代码开启cmd指定命令(如:运行一个手机adb shell命令)

    else if (this.Mode == TravelMode.AutoRecodeMode) { DateTime StartDate = DateTime.Now; string args = ...

  3. [读书笔记]-技术学习-Redis

    1:Redis概览 Remote Dictionary Server 远程字典服务 Redis是基于内存的存储 在一台普通的笔记本上,Redis每秒的读取速度可以达到10万 内存读取数据,断电的时候数 ...

  4. 论 fmap、fmap fmap、与 fmap fmap fmap

    https://blog.csdn.net/sinat_25226993/article/details/44415803

  5. PKCS #1 RSA Encryption Version 1.5 填充方式

    在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式安装以下方式进行 (1) EB = 00+ BT+PS +00 + D ...

  6. Android 性能测试初探(三)

    书接上文 Android 性能测试初探(二) 本文接着往下聊,今天主聊 CPU 及 内存 看到这两个名词,做过PC性能测试的就比较熟悉了,同样的性能测试关注点 :) 首先说说内存,移动端关注的是内存消 ...

  7. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  8. Educational Codeforces Round 35 B/C/D

    B. Two Cakes 传送门:http://codeforces.com/contest/911/problem/B 本题是一个数学问题. 有a个Ⅰ类球,b个Ⅱ类球:有n个盒子.将球放入盒子中,要 ...

  9. Mysql学习总结(38)——21条MySql性能优化经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构,对操作数 ...

  10. orcale单行函数之字符函数