首页 > 其他分享 >存储过程参数操作

存储过程参数操作

时间:2023-07-28 18:33:28浏览次数:43  
标签:存储 END -- BEGIN 参数 操作 过程 UNIT

SQL code 
 
……cursor c is  select id ,name  from adm_organize where status =1;
 
 
……for v_org in c 
 
 
loop 
 
 
select level ,name,id into ???? from adm_organize      start with id=v_org.id      connect by prior  parent_id = id;



-- 这个查询会 



declare @name varchar(50)

select @name=name from Student where sid=@sid 


--请注意,确保查询出的数据是单行


SQLSERVER存儲過程的寫法格式規格



*****************************************************

*** author:Susan

*** date: 2005 / 08 / 05

*** expliation:如何寫存儲過程的格式及例子,有游標的用法!

*** 本版:SQL SERVER 版!

******************************************************/

在存儲過程中的格式規格:

CREATE PROCEDURE XXX



參數1,

參數2……………

As



Declare

參數1,

參數2……………



Set參數1的初始值

Set參數2的初始值…………



Begin trascation

    

Commit trascation

Return

 

下面是一個例子

CREATE
   
   PROCEDURE
   TEST_2


   @strTO
   
   VARCHAR
   (
   3
   )


   AS
   


   DECLARE
   

  
   @strUNIT_NAME
   
   VARCHAR
   (
   800
   ),

  
   @strSQL
   
   VARCHAR
   (
   8000
   ),

  
   @Link
   
   VARCHAR
   (
   1
   ),

  
   @Link1
   
   VARCHAR
   (
   1
   )

  


   SET
   
   @strUNIT_NAME
   =
   ''
   


   SET
   
   @strSQL
   =
   ''
   


   SET
   
   @Link
   =
   ''
   


   SET
   
   @Link1
   =
   ''
   

  


   


   BEGIN
   
   TRANSACTION
                                         

          
   IF
   
   @strTO
   <>
   ''
   

         
   BEGIN
   

                 
   UPDATE
   UNIT 
   SET
   UNIT_NAME
   =
   REPLACE
   (UNIT_NAME,
   '
   *
   '
   ,
   ''
   ) 
   WHERE
   UNIT_CODE
   =
   @strTO
   

         
   END
   

              
   ELSE
   

         
   BEGIN
   

                 
   UPDATE
   UNIT 
   SET
   UNIT_NAME
   =
   UNIT_NAME
   +
   '
   *
   '
   
   WHERE
   UNIT_CODE
   =
   '
   011
   '
   

         
   END
   


   

         
   IF
     
   @strTO
   <>
   ''
   

             
   BEGIN
   

                         
   declare
   db 
   cursor
   
   for
                                                  
   --
   必需聲明在查詢的前面
   

   
                 
   SELECT
   UNIT_NAME 
   FROM
   UNIT 
   WHERE
   
   LEFT
   (UNIT_CODE,
   2
   )
   =
   LEFT
   (
   @strTO
   ,
   2
   )
   --
   -取到相關信息
   

   
             
   END
   

         
   ELSE
   

             
   BEGIN
   

                      
   declare
   db 
   cursor
   
   for
                                                
   --
   必需聲明在查詢的前面
   

   
                      
   SELECT
   UNIT_NAME 
   FROM
   UNIT 
   WHERE
   
   LEFT
   (UNIT_CODE,
   2
   )
   =
   LEFT
   (
   '
   011
   '
   ,
   2
   )
   --
   -取到相關信息
   

   
             
   END
   

         
   open
   db                                                    
   --
   -開起取到的信息
   

   
         
   fetch
   
   next
   
   from
   db 
   into
   
   @strUNIT_NAME
          
   --
   -把第一筆放入@strUNIT_NAME中
   

   
         
   while
   
   @@fetch_status
   
   =
   
   0
                                             
   --
   -表示存在本筆資料
   

   
         
   BEGIN
                                                      
   --
   --開始循環
   

   
                 
   set
   
   @strSQL
   
   =
   @strSQL
   +
   @Link1
   +
   @Link
   +
   
   @strUNIT_NAME
   
   --
   --設定保存的值
   

   
                 
   fetch
   
   next
   
   from
   db 
   into
   
   @strUNIT_NAME
                         
   --
   --進行下次循環
   

   
                 
   SET
   
   @Link
   =
   CHAR
   (
   13
   ) 
   +
   CHAR
   (
   10
   )

                 
   SET
   
   @Link1
   =
   '
   ,
   '
   

         
   END
                                                          
   --
   --結束循環
   

   
         
   close
   db                                                   
   --
   -關閉信息
   

   
         
   deallocate
   db                                            
   --
   -移除資料指標參考
   

   

   SELECT
   
   @strSQL
   


   COMMIT
   
   TRANSACTION
   


   RETURN

如果循环insert的例子 


DECLARE
   
   @strLoginID
   
   VARCHAR
   (
   16
   )

   BEGIN
   

   declare
   db 
   cursor
   
   for
   

   SELECT
   LoginID 
   FROM
   dbo.s_Users 
   WHERE
   
   len
   (UnitCoding) 
   in
   (
   9
   ,
   12
   )

   END
   

   open
   db

   fetch
   
   next
   
   from
   db 
   into
   
   @strLoginID
   

   while
   
   @@fetch_status
   
   =
   
   0
   
   BEGIN
   

   insert
   
   into
   s_P_User

   select
   
   @strLoginID
   ,LevelID 
   from
   s_P_User 
   where
   LoginID 
   =
   
   '
   aa
   '
   

   fetch
   
   next
   
   from
   db 
   into
   
   @strLoginID
   

   END
   

   close
   db

   deallocate
   db

一、TRUNCATE



二、Select INTO 建表


 

      把一个表中的数据复制到另外一个表中。


三、Insert INTO Select



四、补充:临时表


 

      临时表存储在系统数据库tempdb中

 

      临时表会被系统隐式地丢弃


---------------------------------------------------------



五、存储过程(**)



 

      一、简介:

 

     

   存储过程(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 <</span>1000000BEGIN
        set@i=@i+1
    END
    --打印
   PRINT@i


--TRUNCATE 删除表中的所有行,而不记录单个行删除操作,不能带条件

    
        
        TRUNCATETABLEauthors
                

--Select INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的
--Select 不同。 新表的字段具有和 Select 的输出字段相关联(相同)的名字和数据类型。
       
        select*intoNewTable
            fromUname


--Insert INTO Select
       --表ABC必须存在
       --把表Uname里面的字段Username复制到表ABC
       InsertINTOABC SelectUsername FROMUname

--创建临时表
       CreateTABLE#temp(
            UID intidentity(1, 1) PRIMARYKEY,
            UserName varchar(16),
            Pwd varchar(50),
            Age smallint,
            Sex varchar(6)
        )
        --打开临时表
       Select*from#temp

--存储过程
       --要创建存储过程的数据库
       UseTest
        --判断要创建的存储过程名是否存在
           ifExists(Selectname Fromsysobjects Wherename='csp_AddInfo'And

type='P')
            --删除存储过程
           DropProceduredbo.csp_AddInfo
        Go
                
                
        --创建存储过程
       CreateProcdbo.csp_AddInfo
        --存储过程参数
       @UserNamevarchar(16),
        @Pwdvarchar(50),
        @Agesmallint,
        @Sexvarchar(6)
        AS
        --存储过程语句体
       insertintoUname (UserName,Pwd,Age,Sex)
            values(@UserName,@Pwd,@Age,@Sex)
        RETURN
        --执行
       GO
                
        --执行存储过程
       EXECcsp_AddInfo 'Junn.A','123456',20,'男'



标签:存储,END,--,BEGIN,参数,操作,过程,UNIT
From: https://blog.51cto.com/u_548275/6886091

相关文章

  • idea远程连接服务器代码,进行debug操作
    1.配置远程断点 2.将你的springboot项目上传至远程服务器3.在你的远程服务器通过下面的命令启动你的项目nohupjava-Xdebug-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005-jarmonitor_26-0.0.1-SNAPSHOT.jar--server.port=8000>nohup.log......
  • C#与C++动态链接库DLL参数互传
    C#与C++动态链接库DLL参数互传一、C#中导入C++动态链接库二、C#传入字符串参数三、C++传出字符串参数四、C++传出vector一、C#中导入C++动态链接库从界面程序开发的角度来说,C#语言效率较C++高,且通过WPF开发出的程序界面更为美观,但在开发实际项目中有时不可避免的需要使用C++程序库......
  • C# 字符串转码后操作二进制文件
    String转码后写入二进制文件,读二进制文件进行解码返回。publicclassBinaryClass{///<summary>///写二进制文件///</summary>///<paramname="binFile"></param>///<paramname="str">&......
  • jmeter中返回值提取并存储,逻辑控制器
    jmeter多用户登陆保存token到本地使用-风吹稻香-博客园(cnblogs.com)Jmeter之逻辑控制器_jmeter逻辑控制器_Hi~晴天大圣的博客-CSDN博客jmeter中返回值提取并存储_jmeter提取响应结果并保存_子衡fa的博客-CSDN博客......
  • Android实现数据存储技术
    本文介绍Android中的5种数据存储方式。数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是:使用SharedPreferences存储数据; 文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;下面将为大家一一详细介绍。第一种: ......
  • antd的a-table选中复选框后,删除操作还仍然存在选中项的问题暴力解决法
    在antd的a-table中有复选框,选中后进行操作,比如删除,刷新后竟然还存在选中了的情况,这显然不合理,选中的参数是否清空或者拿到的就是选中的参数,都需要查看一边,查了一堆解决办法,试了一下,不行,不知道是不是vue3的情况就不行。网络中的方案大多都是:<a-tablebordered:......
  • nginx的keepalive_requests参数
    在Nginx中,keepalive_requests指令用于控制与客户端和代理服务器之间keep-alive连接的请求次数。在HTTP配置中,它控制Nginx与客户端之间keep-alive连接的请求次数。在upstream配置中,它控制Nginx与上游服务器之间keep-alive连接的请求次数。以下是两种keepalive_r......
  • element-ui中的change事件传递多个参数的方法
    相关小例子(比如,我想要目前的选中值和index)<el-selectv-model="value"placeholder="请选择"><el-optionv-for="(item,index)inoptions":key="item.value":label="item.label":value="i......
  • 记录工作中需要用的 Git 操作
    推荐几个趣味Git学习的地方https://learngitbranching.js.org/?locale=zh_CN猴子都能懂的GIT入门在开发过程中如果在编辑.gitignore时疏漏,导致本不应该上传至远程仓库的某个文件(夹)被提交,则可以使用如下方式解决1.预览想要删除的文件命令:gitrm-r-n--cached文件/文件夹......
  • 数据库数据恢复-断电导致Syabse数据库无法启动,存储页底层数据杂乱的数据恢复案例
    数据库恢复环境:Sybase版本:SQLAnywhere8.0。数据库故障:数据库所在的设备意外断电后,数据库无法启动。错误提示:使用SybaseCentral连接后报错:数据库故障分析:经过北亚企安数据恢复工程师检测,定位到数据库无法启动的原因:突然断电导致Sybase数据库无法正常回写数据,造成多个存......