SQLSERVER 存储过程 语法
??
SQLSERVER 存储过程 语法 SQLSERVER 存储过程 语法 收藏?
*** author:Susan *** date:2005/08/05 *** expliation:如何寫存儲過程的格式及例子,有游標的用法! *** 本版:SQL SERVER 版! ******************************************************/ 在存儲過程中的格式規格: CREATE PROCEDURE XXX /* 列舉傳入參數 1:名稱,2:類型,包括長度 Eg:@strUNIT_CODE varCHAR(3) */ 參數1, 參數2…………… As /* 定義內部參數 1:名稱,2:類型,包括長度 Eg:@strUNIT_CODE varCHAR(3) */ Declare 參數1, 參數2…………… /* 初始化內部參數 Eg:SET @strUNIT_CODE=’’ */ Set參數1的初始值 Set參數2的初始值………… /* 過程的主內容區 Trascation:這裡起到的作用是,如果他中間的任何一個執行錯誤,就全部執行都返回,這裡sql sever 7.0以前一定要寫入,以後的就可以省略 Return:結束這支sp */ Begin trascation ??? /* ??????? 1:可以取得需要的值以存在內部參數中 ???? Eg:SELECT @strUNIT_CODE=UNIT_CODE FROM UNIT WHERE ……. 2:可以用取到的或傳入的參數進行判斷,來進行update,insert,delete 等等操作 eg: IF @strUNIT_CODE=’’ ???????? BEGIN ???? //具體的操作 End Else Begin ??? //具體的操作 End ?3:有關游標的問題 ???? Eg: ??????? declare db cursor for?????? //聲明一個游標(db為其名稱) ??????? SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,2)=LEFT(@strTO,2)//記錄集 ??????? open db???????????????? //打開游標 ??????????? fetch next from db into @strUNIT_NAME //將第一個值放入一個參數中 ??????? while @@fetch_status = 0 ---存在本筆值向下循環 (0:順利執行;-1:失敗,或資料列超出結果集;-2:擷取的資料列已遺漏) ??????? BEGIN???????????? ----開始循環 ??????????????????????? //個體操作 ??????? End??????????????? ----結束循環 ??????? Close db??????????? ---關閉游標 deallocate db???????? //移除資料指標參考 */ 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='' ? /* 處理update 的部分 EXEC TEST_2 '011' EXEC TEST_2 '' SELECT UNIT_NAME FROM UNIT WHERE UNIT_CODE='011' */ 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 /* EXEC TEST_2 '011' 功能說明:本sp用於處理cursor問題 */ ??????? IF?? @strTO<>'' ??????????? BEGIN ??????????????????????? declare db cursor for??????????????????????????????????????????????? --必需聲明在查詢的前面 ??????????????? SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,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 DECLARE @strLoginID VARCHAR(16) 二、Select INTO 建表 三、Insert INTO Select 四、补充:临时表 --------------------------------------------------------- 五、存储过程(**) ??? 一、简介: 它, 。 且数 码只包含存 的 行分析优 都要进行 用语句,否 限
??? @I ??? 三、流程控制语句(if else | select case | while ) ??? 四、存储过程格式 -- 变量的声明,sql里面声明变量时必须在变量前加@符号 -- 变量的赋值,变量赋值时变量前必须加set -- 声明多个变量 -- Sql 里if语句 ??? IF @d = 1 BEGIN ??? -- 打印
-- 循环语句 ??? DECLARE @i INT
??? /* 。但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源少。 释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete。如果要删除表定义及其数据,请 使用 Drop TABLE 语句。 Delete 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。 -- Select INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的
-- 创建临时表 -- 存储过程 type='P') 本文来自CSDN博客,转载请标明出处:http://www.cnblogs.com/blsong/archive/2009/11/27/1612052.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |