zoukankan      html  css  js  c++  java
  • SQLServer存储过程入门

    SQLServer存储过程

    存错过程(procedure)--从字面意思上来看,存储过程就是被存储的一种程序、过程

    • 存储过程就是作为可执行对象存放在数据库中的一个或者多个SQL语句
    • 通俗的说,存储过程就是能完成一定操作的SQL语句

    存储过程的作用

    • 在创建的时候进行编译,以后不需要重新编译,所以执行速度非常快
    • 可以对一组复杂的操作进行封装,可以重复调用,有点类似我们编程中的方法。
    • 可以设置不同的用户的有没有调用指定存储过程的权限

    使用存储过程

    创建存储过程基于的表

    Demo 1 最简单的无参数无返回值的存储过程

    -- 查询全部的司机的信息
    go
    create procedure proc_query_Driver
    as 
    begin
    select * from Driver
    end
    --执行存储过程
    exec proc_query_Driver
    

    Demo 2 无返回值有参数的存储过程

    --根据名称查找司机信息
    create procedure proc_Query_Driver_ByName
    @Name varchar(100)
    as
    begin
    	select * from Driver where Name=@Name
    end
    
    --执行存储过程
    exec proc_Query_Driver_ByName 'DongPeng'
    

    Demo 3 有返回值无参数的存储过程

    --随机返回一条司机记录的Id
    create procedure proc_Query_Driver_ByRandom
    @Id  varchar(100) output
    as 
    begin 
    	declare @countDriver int
    	set @countDriver = (select count(*) from Driver)
    
    	if(@countDriver!=0)
    	begin
    		--随机取出一条司机的记录,获取该记录的ID
    		set @Id= (select top 1 DriverId from Driver order by newid())
    	end
    	else begin
    		--如果没有司机 返回 null
    		set @Id = null
    	end
    end
    
    --执行存储过程
    declare @Id varchar(100) 
    --执行时需要标明,参数是输出参数
    exec proc_query_Driver_ByRandom @id output 
    select  @id
    

    Demo4 有参数有返回值的存储过程

    --根据性别查询司机的数量
    create procedure proc_Query_Count_ByGender
    @Gender varchar(10),
    @count int output
    as  
    begin
    	set @count=(select  count(*) from Driver where Gender=@Gender)
    end
    
    --执行存储过程
    declare @count int 
    exec proc_Query_Count_ByGender 'M',@count output
    select @count
    

    ADO.Net 调用存储过程

    private static string _connectionStr = "server=.;uid=your username;pwd=your password;database=VehicleDB";
    //执行 proc_Query_Count_ByGender 存储过程
    public static int ExecProcQeruyDriverCount(string gender)
    {
        //数据库链接类
        using (SqlConnection conn = new SqlConnection(_connectionStr))
        {
            //打开链接
            conn.Open();
            //数据库命令,传入要执行的存储过程和数据库连接类
            using (SqlCommand cmd = new SqlCommand("proc_Query_Count_ByGender", conn))
            {
                //这是命令的类型
                cmd.CommandType = CommandType.StoredProcedure;
                //传入参数
                cmd.Parameters.Add(new SqlParameter("@Gender", SqlDbType.VarChar)).Value = gender;
                //添加返回参数
                cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int)).Direction = ParameterDirection.Output;
                //执行命令
                cmd.ExecuteNonQuery();
                //获取返回参数
                int driverCount = (int)cmd.Parameters["@count"].Value;
    
                return driverCount;
    
            }
        }
    }
    
    //调用
    static void Main(string[] args)
    {
        int driverCount = SQLHelper.ExecProcQeruyDriverCount("M");
        Console.WriteLine(driverCount);
        Console.ReadKey();
    }
    
    //输出结果为8
    
  • 相关阅读:
    Linux 文件权限
    Linux 查看磁盘使用情况
    绑定到外部验证服务LDAP、配置 autofs
    创建逻辑卷
    查找一个字符串
    查找用户目录下的指定文件
    配置NTP时间服务器
    通过Roslyn构建自己的C#脚本(更新版)(转)
    Elon Musk
    可能改变世界的13个“终结”(上)
  • 原文地址:https://www.cnblogs.com/slyfox/p/7131038.html
Copyright © 2011-2022 走看看