存储过程参数操作

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>1000000 BEGIN
        
set @i=@i+1
    
END
    
-- 打印
    PRINT @i


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

    

        
        
TRUNCATE TABLE authors
                

-- 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(11PRIMARY KEY,
            UserName 
varchar(16),
            Pwd 
varchar(50),
            Age 
smallint,
            Sex 
varchar(6)
        )
        
-- 打开临时表
        Select * from #temp

-- 存储过程
        -- 要创建存储过程的数据库
        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,''
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值