Sql 存储过程 及易迷糊知识

存储过程

    一、简介:     
  存储过程(Stored Procedure), 是一组为了完成特定功能的SQL 语句,集经编译后 存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行 它, 在SQL Server 的系列版本中,存储过程分为两类: 系统提供的存储过程和用户自定义存储过程 。
      系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取 信息,从而为系统管理员管理SQL Server。 用户自定义存储过程是由用户创建,并能完成 某一特定功能,如:查询用户所需数据信息的存储过程。
       存储过程具有以下优点
    1.存储过程 允许标准组件式编程 (模块化设计)
       存储过程在被创建以后,可以在程序中被 多次调用 ,而不必重新编写该存储过程的SQL语句,而 且数 据库专业人员 可随时对存储过程进行修改,但对应用程序源代码毫无影响 。因为应用程序源代 码只包含存 储过程的调用语句,从而极大地提高了程序的可移植性。             
    2.存储过程能够实现快速的执行 速度
  如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理 的 执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进 行分析优 化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时 都要进行 编译和优化,因此速度相对要慢一些。
    3.存储过程能够 减少网络流量
  对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL  语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调 用语句,否 则将是多条SQL 语句从而大大增加了网络流量降低网络负载。             
    4.存储过程可被作为一种安全机制来充分利用
  系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的 数据访问权限 的 限 制。
    二、变量
    @I
    三、流程控制语句(if else | select case | while )
     Select ... CASE  实例
    DECLARE @iRet INT, @PKDisp VARCHAR(20)
    SET @iRet = '1'
    Select @iRet = 
    CASE
        WHEN @PKDisp = '一' THEN 1
        WHEN @PKDisp = '二' THEN 2
        WHEN @PKDisp = '三' THEN 3
        WHEN @PKDisp = '四' THEN 4
        WHEN @PKDisp = '五' THEN 5
        ELSE 100
    END
    四、存储过程格式         
    创建存储过程
    Create Proc dbo.存储过程名
    存储过程参数
    AS
    执行语句
    RETURN
    执行存储过程
    GO
*********************************************************/ 

-- 变量的声明,sql里面声明变量时必须在变量前加@符号
    DECLARE @I INT
-- 变量的赋值,变量赋值时变量前必须加set
    SET @I = 30
-- 声明多个变量
    DECLARE @s varchar(10),@a INT
-- Sql 里if语句
    IF 条件 BEGIN
        执行语句
    
END
    
ELSE BEGIN
        执行语句
    
END
            
    
DECLARE @d INT
    
set @d = 1
    
IF @d = 1 BEGIN
    
-- 打印
        PRINT '正确'
    
END
    
ELSE BEGIN
        
PRINT '错误'
    
END


-- Sql 里的多条件选择语句.
    DECLARE @iRet INT@PKDisp VARCHAR(20)
    
SET @iRet = 1
    
Select @iRet =
    
CASE
        
WHEN @PKDisp = '' THEN 1
        
WHEN @PKDisp = '' THEN 2
        
WHEN @PKDisp = '' THEN 3
        
WHEN @PKDisp = '' THEN 4
        
WHEN @PKDisp = '' THEN 5
        
ELSE 100
    
END

-- 循环语句
    WHILE 条件 BEGIN    
        执行语句
    
END

    
DECLARE @i INT
    
SET @i = 1
    
WHILE @i<1000000 BEGIN
        
set @i=@i+1
    
END
    
-- 打印
    PRINT @i

-- 存储过程
        -- 要创建存储过程的数据库
        Use Test
        -- 判断要创建的存储过程名是否存在
            if Exists(Select name From sysobjects Where name='csp_AddInfo' And type='P')
            -- 删除存储过程
            Drop Procedure dbo.csp_AddInfo
        Go           
                
        -- 创建存储过程
        Create Proc dbo.csp_AddInfo
        -- 存储过程参数
        @UserName varchar(16),
        @Pwd varchar(50),
        @Age smallint,
        @Sex varchar(6)
        AS
        -- 存储过程语句体
        insert into Uname (UserName,Pwd,Age,Sex)
            values (@UserName,@Pwd,@Age,@Sex)
        RETURN
        -- 执行
        GO
                
        -- 执行存储过程
        EXEC csp_AddInfo 'Junn.A','123456',20,'男'

TRUNCATE

 

 TRUNCATE  删除表中的所有行,而不记录单个行删除操作 ,不能带条件
     /*
    TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源少。
    Delete 语句每次删除一行, 并在事务日志中为所删除的每行记录一项 。TRUNCATE TABLE 通过 释放存储表数据所用的数据页 来删除数据,并且只在 事务日志中记录页的释放 。
    TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行 标识所用的计数值重置为该列的种子 。 如果想保留标识计数值,请改用 Delete。如果要删除表定义及其数据 ,请使用 Drop TABLE 语句。
     对于由 FOREIGN KEY 约束引用的表 ,不能使用 TRUNCATE TABLE,而应使用不带 Where 子句的Delete 语句。由于TRUNCATE TABLE 不记录在日志中,所以 它不能激活触发器 。
    TRUNCATE TABLE 不能用于参与了索引视图的表。
    示例
        下例删除 authors 表中的所有数据。 */         
         TRUNCATE   TABLE  authors


 Select INTO

 

-- Select INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的 Select 不同。 新表的字段具有和 Select 的输出字段相关联(相同)的名字和数据类型。        
        select * into NewTable
            from Uname
-- Insert INTO Select
        -- 表ABC必须存在
        -- 把表Uname里面的字段Username复制到表ABC
        Insert INTO ABC Select Username FROM Uname

-- 创建临时表
        Create TABLE #temp(
            UID int identity(1, 1) PRIMARY KEY,
            UserName varchar(16),
            Pwd varchar(50),
            Age smallint,
            Sex varchar(6)
        )
        -- 打开临时表
        Select * from #temp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值