123常用存储过程集锦
存储过程详细语法
存储过程详细语法嘿,咱今儿就来唠唠存储过程详细语法这档子事儿!你说这存储过程啊,就像是一个魔法盒子,里面装满了各种奇妙的代码和逻辑。
它可不是一般的存在呀!它能让你的数据库操作变得高效又灵活。
先来说说这参数吧,就好比是给魔法盒子设定的开关,通过不同的参数输入,能得到不同的结果呢。
参数有输入参数和输出参数,输入参数就像是给盒子投喂原料,输出参数呢,就是盒子吐出来的成果。
然后是语句块,这可是存储过程的核心部分。
就好像是魔法盒子里的层层机关,各种条件判断、循环语句都在这儿大展身手。
什么 IF-THEN-ELSE 啦,WHILE 循环啦,都在这儿玩得不亦乐乎。
还有啊,存储过程里还能有变量呢!这变量就像是魔法盒子里的小精灵,它们可以存储各种数据,在程序运行过程中蹦蹦跳跳,发挥着重要作用。
再讲讲这游标,游标就像是一个在数据海洋里穿梭的小船,可以一行一行地读取数据,多有意思呀!你想想看,要是没有这些详细的语法,那存储过程不就成了一个空壳子啦?那还怎么高效地处理数据呀!就好比你要盖一座大楼,没有详细的设计图纸和施工规范,那能盖得起来吗?肯定不行呀!这存储过程详细语法就是那设计图纸和施工规范,让我们能有条不紊地搭建起数据库操作的大厦。
而且呀,学会了这些语法,你就像是掌握了一门绝世武功,在数据库的世界里可以自由驰骋啦!难道你不想成为这样的高手吗?你看那些厉害的程序员,哪个不是对存储过程详细语法了如指掌呀!他们能轻松地写出高效又漂亮的存储过程,让数据乖乖听话。
所以呀,别小瞧了这存储过程详细语法,它可是有着大用处呢!好好学起来吧,让你的数据库操作水平更上一层楼!你还在等什么呢?赶紧行动起来呀!。
SQL存储过程的语句(SQL存储过程)
SQL存储过程的语句(SQL存储过程)SQL语句集锦--语句功能--数据操作SELECT--从数据库表中检索数据⾏和列INSERT--向数据库表添加新数据⾏DELETE--从数据库表中删除数据⾏UPDATE--更新数据库表中的数据--数据定义CREATE TABLE--创建⼀个数据库表DROP TABLE--从数据库中删除表ALTER TABLE--修改数据库表结构CREATE VIEW--创建⼀个视图DROP VIEW--从数据库中删除视图CREATE INDEX--为数据库表创建⼀个索引DROP INDEX--从数据库中删除索引CREATE PROCEDURE--创建⼀个存储过程DROP PROCEDURE--从数据库中删除存储过程CREATE TRIGGER--创建⼀个触发器DROP TRIGGER--从数据库中删除触发器CREATE SCHEMA--向数据库添加⼀个新模式DROP SCHEMA--从数据库中删除⼀个模式CREATE DOMAIN --创建⼀个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除⼀个域--数据控制GRANT--授予⽤户访问权限DENY--拒绝⽤户访问REVOKE--解除⽤户访问权限--事务控制COMMIT--结束当前事务ROLLBACK--中⽌当前事务SET TRANSACTION--定义当前事务数据访问特征--程序化SQLDECLARE--为查询设定游标EXPLAN --为查询描述数据访问计划OPEN--检索查询结果打开⼀个游标FETCH--检索⼀⾏查询结果CLOSE--关闭游标PREPARE--为动态执⾏准备SQL 语句EXECUTE--动态地执⾏SQL 语句DESCRIBE --描述准备好的查询---局部变量declare@id char(10)--set @id = '10010001'select@id='10010001'---全局变量---必须以@@开头--IF ELSEdeclare@x int@y int@z intselect@x=1@y=2@z=3if@x>@yprint'x > y'--打印字符串'x > y'else if@y>@zprint'y > z'else print'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’ then e_wage*1.08when job_level = ’2’ then e_wage*1.07when job_level = ’3’ then e_wage*1.06else e_wage*1.05end--WHILE CONTINUE BREAKdeclare@x int@y int@c intselect@x=1@y=1while@x<3beginprint@x--打印变量x 的值while@y<3beginselect@c=100*@x+@yprint@c--打印变量c 的值select@y=@y+1endselect@x=@x+1select@y=1end--WAITFOR--例等待1 ⼩时2 分零3 秒后才执⾏SELECT 语句waitfor delay ’01:02:03’select*from employee--例等到晚上11 点零8 分后才执⾏SELECT 语句waitfor time ’23:08:00’select*from employee***SELECT***select*(列名) from table_name(表名) where column_name operator valueex:(宿主)select*from stock_information where stockid =str(nid)stockname ='str_name'stockname like'% find this %'stockname like'[a-zA-Z]%'--------- ([]指定值的范围)stockname like'[^F-M]%'--------- (^排除指定范围)--------- 只能在使⽤like关键字的where⼦句中使⽤通配符)or stockpath ='stock_path'or stocknumber <1000and stockindex =24not stock***='man'stocknumber between20and100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by1,2--------- by列号stockname = (select stockname from stock_information where stockid =4) --------- ⼦查询--------- 除⾮能确保内层select只返回⼀个⾏的值,--------- 否则应在外层where⼦句中⽤⼀个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber +10" = stocknumber +10from table_nameselect stockname , "stocknumber" =count(*) from table_name group by stockname--------- group by 将表按⾏分组,指定列中有相同的值having count(*) =2--------- having选定指定的组select*from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的⽽table2中没有得以null表⽰ table1.id =* table2.id -------- 右外部连接select stockname from table1union[all]----- union合并查询结果集,all-保留重复⾏select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname =defaultStockname =nullStocknumber = Stockname +4***delete***delete from table_name where Stockid =3truncate table_name ----------- 删除表中所有⾏,仍保持表的完整性drop table table_name --------------- 完全删除表***alter table***--- 修改数据库表结构alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ---- 显⽰表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... ----- 实现删除列的⽅法(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束***function(/*常⽤函数*/)***----统计函数----AVG--求平均值COUNT--统计数⽬MAX--求最⼤值MIN--求最⼩值SUM--求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求⼯资最⾼的员⼯姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三⾓函数***/SIN(float_expression) --返回以弧度表⽰的⾓的正弦COS(float_expression) --返回以弧度表⽰的⾓的余弦TAN(float_expression) --返回以弧度表⽰的⾓的正切COT(float_expression) --返回以弧度表⽰的⾓的余切/***反三⾓函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表⽰的⾓ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表⽰的⾓ATAN(float_expression) --返回正切是FLOAT 值的以弧度表⽰的⾓ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表⽰的⾓DEGREES(numeric_expression)--把弧度转换为⾓度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把⾓度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的⾃然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平⽅根/***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最⼩整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最⼩整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五⼊值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π即3.1415926535897936RAND([integer_expression]) --⽤任选的[integer_expression]做种⼦值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数⽤于将ASCII 码转换为字符--如果没有输⼊0 ~ 255 之间的ASCII 码值CHAR 函数会返回⼀个NULL 值LOWER() --函数把字符串全部转换为⼩写UPPER() --函数把字符串全部转换为⼤写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的⼦串出现的开始位置SOUNDEX() --函数返回⼀个四位字符码--SOUNDEX函数可⽤来查找声⾳相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第⼀个字符不同--1 两个SOUNDEX 函数返回值的第⼀个字符相同--2 两个SOUNDEX 函数返回值的第⼀⼆个字符相同--3 两个SOUNDEX 函数返回值的第⼀⼆三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运⾏结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回⼀个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运⾏结果如下----------- -----------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定⼦串的字符串/*select replace('abc123g', '123', 'def')运⾏结果如下----------- -----------abcdefg*/SPACE() --函数返回⼀个有指定长度的空⽩字符串STUFF() --函数⽤另⼀⼦串替换字符串指定位置长度的⼦串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression>AS<data_ type>[ length ])CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression>[, style])select cast(100+99as char) convert(varchar(12), getdate())运⾏结果如下------------------------------ ------------199 Jan 152000----⽇期函数----DAY() --函数返回date_expression 中的⽇期值MONTH() --函数返回date_expression 中的⽉份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定⽇期date 加上指定的额外⽇期间隔number 产⽣的新⽇期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定⽇期在datepart ⽅⾯的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回⽇期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回⽇期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的⽇期和时间----系统函数----APP_NAME() --函数返回当前执⾏的应⽤程序的名称COALESCE() --函数返回众多表达式中第⼀个⾮NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使⽤⽤于插⼊⼀个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理⽇期ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值⽤指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回⼀个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值。
数据库存储过程用法
数据库存储过程用法数据库存储过程使用指南数据库存储过程是一种预先编译并存储在数据库中的一组SQL语句。
它们可以通过调用名称来执行,使得数据库操作更加高效和灵活。
在本文中,我们将介绍数据库存储过程的一些常用用法。
1. 创建存储过程创建存储过程是使用数据库管理系统的功能之一。
下面是创建存储过程的步骤:1.使用CREATE PROCEDURE语句来定义存储过程的名称和参数。
2.在存储过程体中编写SQL语句和逻辑代码。
3.使用END语句结束存储过程的定义。
4.执行CREATE PROCEDURE语句,将存储过程保存到数据库中。
2. 调用存储过程调用存储过程可以使用EXEC或CALL关键字。
下面是调用存储过程的示例代码:EXEC procedure_name; -- 使用EXEC关键字调用存储过程CALL procedure_name; -- 使用CALL关键字调用存储过程3. 存储过程参数存储过程可以接受输入参数和输出参数。
下面是定义存储过程参数的示例代码:CREATE PROCEDURE procedure_name@input_param data_type, -- 输入参数@output_param data_type OUTPUT -- 输出参数ASBEGIN-- 存储过程逻辑代码END4. 存储过程中的条件判断和循环存储过程可以使用条件判断语句(如IF语句)和循环语句(如WHILE语句)来实现复杂的逻辑。
下面是使用条件判断和循环的示例代码:CREATE PROCEDURE procedure_nameASBEGIN-- 条件判断IF conditionBEGIN-- 逻辑代码END-- 循环WHILE conditionBEGIN-- 逻辑代码ENDEND5. 存储过程中的异常处理存储过程中可以使用异常处理语句(如TRY-CATCH语句)来处理错误和异常情况。
下面是使用异常处理的示例代码:CREATE PROCEDURE procedure_nameASBEGINBEGIN TRY-- 逻辑代码END TRYBEGIN CATCH-- 异常处理代码END CATCHEND6. 存储过程的优势与用途•性能优化:存储过程可以减少网络通信开销,提高数据库性能。
存储过程
存储过程:
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库中的一个重要对象。
在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升格式:
sql中的存储过程及相关介绍:
CREATE PROCEDURE [拥有者.]存储过程名[;程序编号]
[(参数#1,…参数#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} ]
[FOR REPLICATION]
AS 程序行
其中存储过程名不能超过128个字。
每个存储过程中最多设定1024个参数
(SQL Server 7.0以上版本),参数的使用方法如下:
@参数名数据类型[VARYING] [=内定值] [OUTPUT]
每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。
[内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。
[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。
存储过程语句
存储过程语句1. 创建存储过程:CREATE PROCEDURE sp_GetEmployeeASBEGIN-- 代码逻辑END2. 带参数的存储过程:CREATE PROCEDURE sp_GetEmployeeByID@EmployeeID INTASBEGIN-- 代码逻辑END3. 存储过程中的条件判断:CREATE PROCEDURE sp_GetEmployeeByDepartment @DepartmentID INTASBEGINIF @DepartmentID = 1BEGIN-- 代码逻辑1ENDELSEBEGIN-- 代码逻辑2ENDEND4. 存储过程中的循环语句:CREATE PROCEDURE sp_UpdateSalaryASBEGINDECLARE @EmployeeID INTDECLARE @Salary DECIMAL(10,2)DECLARE @Counter INTSET @Counter = 1WHILE @Counter <= 10BEGINSET @EmployeeID = @CounterSET @Salary = @Counter * 1000 -- 更新员工薪水逻辑SET @Counter = @Counter + 1ENDEND5. 存储过程中的异常处理:CREATE PROCEDURE sp_InsertEmployee@EmployeeName NVARCHAR(50),@DepartmentID INTASBEGINBEGIN TRY-- 插入员工逻辑END TRYBEGIN CATCH-- 错误处理逻辑END CATCHEND6. 存储过程中的查询语句:CREATE PROCEDURE sp_GetEmployeeBySalaryRange @MinSalary DECIMAL(10,2),@MaxSalary DECIMAL(10,2)ASBEGINSELECT EmployeeID, EmployeeName, SalaryFROM EmployeesWHERE Salary >= @MinSalary AND Salary <= @MaxSalary END7. 存储过程中的更新语句:CREATE PROCEDURE sp_UpdateEmployeeName@EmployeeID INT,@NewName NVARCHAR(50)ASBEGINUPDATE EmployeesSET EmployeeName = @NewNameWHERE EmployeeID = @EmployeeIDEND8. 存储过程中的删除语句:CREATE PROCEDURE sp_DeleteEmployee@EmployeeID INTASBEGINDELETE FROM EmployeesWHERE EmployeeID = @EmployeeIDEND9. 存储过程中的插入语句:CREATE PROCEDURE sp_InsertNewEmployee@EmployeeName NVARCHAR(50),@DepartmentID INTASBEGININSERT INTO Employees (EmployeeName, DepartmentID) VALUES (@EmployeeName, @DepartmentID)END10. 存储过程中的返回结果:CREATE PROCEDURE sp_GetEmployeeCountASBEGINDECLARE @Count INTSELECT @Count = COUNT(*)FROM EmployeesRETURN @Count。
存储过程详解
存储过程详解1,创建⼀个简单存储过程⽰例:create Procedure user --创建名为user存储过程as --指定过程要执⾏下⾯操作select * from tablenamego2,调⽤存储过程⽰例:exec user 或者 execute user执⾏后结果为:select * from tablename 查询的结果3,修改存储过程⽰例:alter Procedure 存储过程名4,删除存储过程⽰例:drop Procedure 存储过程名5,带⼀个参数的存储过程⽰例:if (exists (select * from sys.objects where name = 'user')) --如果有user这个存储过程drop Procedure user --删除usergocreate Procedure user --创建user存储过程(@UserID int) --声明⼀个输⼊参数asselect * from stud where studid=@UserID; --查询学⽣表中输⼊的userid的信息--执⾏user 存储过程exec user 1; --这⾥的1就是Userid6、创建带返回值的存储过程⽰例:if (exists (select * from sys.objects where name = 'user'))drop Procedure usergocreate Procedure user(@UserName varchar(20),--输⼊参数,⽆默认值@UserId int output --输⼊/输出参数⽆默认值,output 返回参数)asselect @UserId=studId from stud where studname=@UserName --通过UserName找UserId--执⾏User这个带返回值的存储过程declare @id int --声明⼀个变量⽤来接收执⾏存储过程后的返回值exec user '李四',@id output --执⾏存储过程。
存储过程实例精选
存储过程实例精选存储过程是一组在数据库中执行的预编译的SQL语句。
它们是用来执行一系列的数据库操作,可以减少网络通信的次数,提高数据库性能,同时也可以确保数据的一致性和完整性。
在这篇文章中,我们将介绍一些存储过程实例的精选内容。
1.添加新用户存储过程可以用于添加新用户到数据库中。
当有新用户注册时,我们可以使用存储过程来验证用户输入的数据,如用户名和密码是否符合要求,然后将用户信息插入到用户表中。
此外,存储过程还可以对用户信息进行加密,并生成唯一的用户ID。
2.计算订单总额在一个电子商务网站中,有时需要计算订单的总额。
我们可以使用存储过程来计算订单中每个商品的价格,并将这些价格相加得到订单的总额。
通过使用存储过程,我们可以只向数据库发送一条SQL查询,而不是分别查询每个商品的价格,从而提高了查询性能。
3.更新库存存储过程也可以用于更新商品库存。
当用户购买商品时,我们可以使用存储过程来减少商品的库存数量。
在更新库存的过程中,存储过程可以检查商品的库存量是否足够,如果库存不足,则不允许用户购买。
4.备份数据库定期备份数据库是非常重要的,以防止数据丢失。
我们可以创建一个存储过程来自动备份数据库。
这个存储过程可以在指定的时间间隔内运行,并将数据库备份到指定的位置。
通过使用存储过程,我们可以快速方便地完成数据库的备份工作。
5.根据条件检索数据存储过程可以接受参数,并根据这些参数来检索数据。
例如,我们可以创建一个存储过程,接受一个日期作为参数,并返回在该日期之后的所有订单。
这样,我们可以根据需要灵活地检索数据库中的数据。
6.发送电子邮件通知存储过程还可以用于发送电子邮件通知。
例如,当有新订单时,我们可以使用存储过程来生成包含订单信息的电子邮件,并将其发送给相关的人员。
通过使用存储过程,我们可以将发送电子邮件的逻辑和业务逻辑分离,使代码更易于维护。
7.执行复杂的事务存储过程可以执行复杂的事务操作,例如同时更新多个表,保证数据的一致性。
存储过程详解
存储过程详解存储过程的in参数宽度又外部决定,而out和in out的宽度是由存储过程内部决定。
此外in后面还可以带默认值,而out 和in out不能带默认值。
1.create or replace procedure procdefault(p1 varchar2,p2 varchar2 default'mark')2.as3.begin4. dbms_output.put_line(p2);5.end;6.SQL> set serveroutput on;7.SQL> exec procdefault('a');一、集合:索引表,也称为pl/sql表,不能存储于数据库中,元素的个数没有限制,下标可以为负值。
1.type t_table is table of varchar2(20) index by binary_integer;2.v_student t_table;嵌套表,索引表没有 index by子句就是嵌套表,它可以存放于数据库中,元素个数无限,下标从1开始,并且需要初始化1.type t_nestTable is table of varchar2(20);2.v_class t_nestTable ;仅是这样声明是不能使用的,必须对嵌套表进行初始化,对嵌套表进行初始化可以使用它的构造函数v_class :=t_nestTable('a','b','c');变长数组,变长数组与高级语言的数组类型非常相似,下标以1开始,元素个数有限。
也需要进行初始化。
type t_array is varray (20) of varchar2(20);由此可见,如果仅仅是在存储过程中当作集合变量使用,索引表是最好的选择。
二、游标:显示游标分为:普通游标,参数化游标和游标变量三种。
游标循环最佳策略我们在进行PL/SQL编程时,经常需要循环读取结果集的数据。
存储过程例子范文
存储过程例子范文存储过程是在数据库中创建的一组预定义的SQL语句,这些语句按照特定的顺序和逻辑执行,将一系列数据库操作封装在一个单独的单元中。
存储过程可以接受参数,并且可以返回结果集,提高了数据库的性能和安全性。
下面是一个存储过程的例子,该存储过程用于在一个学生表中插入一条记录:```sqlCREATE PROCEDURE InsertStudentASBEGININSERT INTO Students (Name, Age, Gender, Address)END```通过使用存储过程,我们可以有效地执行数据库操作。
我们可以通过以下的SQL语句来调用上面的存储过程:```sqlEXEC InsertStudent 'John Doe', 20, 'M', '123 Main St'```上述语句将会将名为'John Doe'、年龄为20、性别为'M'、地址为'123 Main St'的学生插入到`Students`表中。
除了运行单个的SQL语句,存储过程还可以包含其他控制流结构,例如条件语句和循环语句。
下面是一个带有条件语句的存储过程的例子:```sqlCREATE PROCEDURE GetStudentsByGenderASBEGINSELECT * FROM Students WHERE Gender = 'M'SELECT * FROM Students WHERE Gender = 'F'ELSESELECT * FROM StudentsEND```通过使用存储过程,我们可以根据不同的参数值执行不同的查询,从而提高数据库的灵活性和复用性。
总结起来,存储过程是数据库中一组预定义的SQL语句,可以按照特定的逻辑和顺序执行。
存储过程可以接受参数,并且可以返回结果集。
oracle 存储过程优秀例子
oracle 存储过程优秀例子Oracle存储过程是一种在数据库中存储和执行SQL语句的过程。
它可以接受参数并返回结果,用于实现复杂的业务逻辑和数据操作。
下面是10个优秀的Oracle存储过程示例,展示了不同方面的功能和用法。
1. 创建表并插入数据```sqlCREATE PROCEDURE create_employee_table ASBEGINEXECUTE IMMEDIATE 'CREATE TABLE employee (id NUMBER, name VARCHAR2(100))';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (1, ''John Doe'')';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (2, ''Jane Smith'')';END;```这个存储过程创建了一个名为employee的表,并插入了两条数据。
2. 更新员工姓名```sqlCREATE PROCEDURE update_employee_name(p_id NUMBER,p_name VARCHAR2) ASBEGINUPDATE employee SET name = p_name WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID和新的姓名作为参数,然后更新对应员工的姓名。
3. 删除员工记录```sqlCREATE PROCEDURE delete_employee(p_id NUMBER) AS BEGINDELETE FROM employee WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID作为参数,然后删除对应的员工记录。
存储过程的描述
存储过程的描述一、概述存储过程是一种可在数据库中执行的程序,它可以接受输入参数并返回输出参数,还可以执行SQL语句和控制结构。
存储过程通常用于处理复杂的数据操作和业务逻辑,能够提高数据库的性能和安全性。
本文将介绍存储过程的创建、调用、修改和删除等操作,以及存储过程的优点和缺点。
二、创建存储过程1. 创建存储过程需要使用CREATE PROCEDURE语句,在语句中指定存储过程名称、输入参数、输出参数和SQL语句等信息。
示例:CREATE PROCEDURE sp_GetProduct@CategoryID intASBEGINSELECT ProductName, UnitPrice FROM Products WHERE CategoryID = @CategoryIDEND2. 存储过程中可以包含多个SQL语句,使用BEGIN...END块将它们括起来。
示例:CREATE PROCEDURE sp_UpdateOrderStatus@OrderID int,@Status varchar(20)ASBEGINUPDATE Orders SET Status = @Status WHERE OrderID =@OrderID;INSERT INTO OrderLog (OrderID, LogDate, LogText) VALUES (@OrderID, GETDATE(), 'Status changed to '+@Status);END3. 存储过程还可以使用IF...ELSE、WHILE等控制结构来实现复杂的业务逻辑。
示例:CREATE PROCEDURE sp_PromoteEmployee@EmployeeID int,@Salary floatASBEGINIF @Salary > 5000UPDATE Employees SET Salary = @Salary*1.1 WHERE EmployeeID = @EmployeeID;ELSEUPDATE Employees SET Salary = @Salary*1.2 WHERE EmployeeID = @EmployeeID;END三、调用存储过程1. 调用存储过程需要使用EXECUTE或EXEC语句,后面跟着存储过程名称和输入参数。
存储过程及其实例演示
存储过程及其实例演⽰概念存储过程存储过程是为了完成特定功能的SQL语句的集合。
包括了⼀些流程控制语句及数据类型。
种类⾃定义存储过程创建1.使⽤CREATE PROCEDURE创建存储过程CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>-- Add the parameters for the stored procedure here<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;-- Insert statements for procedure hereSELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>ENDGOps:procedure_name 存储过程的名称。
最长为128个字符sysname:存储过程的参数。
相当于数据类型nvarchar(128)。
相见:@param1:存储过程中使⽤到的参数。
@Datatype:参数的数据类型。
另外⼤家可以看到这⾥的SQL语句都是⼤写的。
这是因为SQL语⾔在执⾏的时候是先转化为⼤写再去执⾏,对于⼀些⼩的程序这些转化的时间可以忽略,但是当⼀些⼤型的数据处理的时候就会浪费许多时间。
存储过程_精品文档
存储过程存储过程是一种在关系型数据库系统中执行预定义操作的机制。
它是一组被捆绑在一起的SQL语句,被作为一个单元来执行。
存储过程可以接受输入参数,可以返回结果集或输出参数。
它们可被多次调用,提供了一种有效地复用数据库逻辑的方式。
在许多应用程序中,存储过程被广泛使用。
它们可以用于处理复杂的数据操作、业务逻辑和数据验证。
存储过程还可以提供更高的性能和安全性,因为它们将SQL语句保存在数据库服务器上,并可以被多个客户端应用程序共享和重用。
为什么使用存储过程?有以下几个好处:1. 提高性能:存储过程在数据库服务器上执行,因此可以避免网络延迟,并且可以最小化与数据库之间的通信。
这种本地执行可以提高性能,尤其是当存储过程涉及复杂的数据操作时。
2. 降低网络流量:存储过程将一组SQL语句捆绑在一起,并作为一个单独的操作发送到数据库服务器。
这样可以减少需要通过网络传输的数据量,从而减少了网络流量。
3. 简化复杂的操作:存储过程可以将多个SQL语句合并为一个单元,从而简化了复杂的数据库操作。
这使得开发人员可以在一个地方定义和管理逻辑,而不需要在每个应用程序中重复编写相同的代码。
4. 提高安全性:通过使用存储过程,可以限制对数据库的直接访问,并可以通过访问控制权限来保护数据。
存储过程还可以防止SQL注入攻击和其他安全漏洞。
5. 促进团队合作:存储过程将数据库逻辑与应用程序逻辑分离,使开发团队可以并行开发,而不会相互干扰。
这种分离还可以提高代码的可维护性和可重用性。
在设计和创建存储过程时,需要考虑以下几个方面:1. 功能需求:首先需要确定存储过程的功能和目标。
这可能涉及到处理数据的逻辑、执行特定的业务规则或验证数据。
根据这些需求,可以编写相应的SQL语句,并将其组合成存储过程。
2. 输入参数:存储过程可以接受输入参数,以便接收外部数据,并根据这些参数执行相应的操作。
输入参数可以是任意数据类型,并可以有默认值。
使用输入参数可以实现灵活的数据操作和业务逻辑。
sqlserver 常用存储过程集锦
sqlserver 常用存储过程集锦/*分页查找数据*/CREATE PROCEDURE [dbo].[GetRecordSet]@strSql varchar(8000),--查询sql,如select * from [user]@PageIndex int,--查询当页号@PageSize int--每页显示记录ASset nocount ondeclare @p1 intdeclare @currentPage intset @currentPage = 0declare @RowCount intset @RowCount = 0declare @PageCount intset @PageCount = 0exec sp_cursoropen @p1 output,@strSql,@scrollopt=1,@ccopt=1,@rowcount=@rowCount output --得到总记录数select @PageCount=ceiling(1.0*@rowCount/@pagesize) --得到总页数,@currentPage=(@PageIndex-1)*@PageSize+1select @RowCount,@PageCountexec sp_cursorfetch @p1,16,@currentPage,@PageSizeexec sp_cursorclose @p1set nocount offGO=========================用户注册============================/*用户注册,也算是添加吧*/Create proc [dbo].[UserAdd](@loginID nvarchar(50), --登录帐号@password nvarchar(50), --密码@email nvarchar(200) --电子信箱)asdeclare @userID int --用户编号--登录账号已经被注册if exists(select loginID from tableName where loginID = @loginID)beginreturn -1;end--邮箱已经被注册else if exists(select email from tableName where email = @email)beginreturn -2;end--注册成功elsebeginselect @userID = isnull(max(userID),100000)+1 from tableNameinsert into tableName(userID,loginID,[password],userName,linkNum,address,email,createTime,status) values(@userID,@loginID,@password,'','','',@email,getdate(),1)return @userIDend。
存储过程使用大全
存储过程使用大全1,调用没有参数的存储过程<%set conn=server.CreateObject("adodb.connection")set cmd=server.CreateObject("mand")strconn="dsn=pubs;uid=sa;pwd"conn.Open strconnset cmd.ActiveConnection=connmandText="{call nono}"''set rs=cmc.exe 或者cmd.executeset rs=cmd.Execute()%>2,一个输入的参数的存储过程<%set conn=server.CreateObject("adodb.connection")set cmd=server.CreateObject("mand")strconn="dsn=pubs;uid=sa;pwd"conn.Open strconnset cmd.ActiveConnection=connmandText="{call oneinput(?)}"cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger ,adParamInput ) cmd("@aaa")=100cmd.Execute()%>3,一个输入参数和一个输出的参数<%set conn=server.CreateObject("adodb.connection")set cmd=server.CreateObject("mand")strconn="dsn=pubs;uid=sa;pwd"conn.Open strconnset cmd.ActiveConnection=connmandText = "{call oneinout(?,?)}"cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput)cmd("@aaa")=10cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput) cmd.Execute()bbb=cmd("@bbb")%>4,一个输入参数,一个输出参数,和一个返回值<%set conn=server.CreateObject("adodb.connection")set cmd=server.CreateObject("mand")strconn="dsn=pubs;uid=sa;pwd"conn.Open strconnset cmd.ActiveConnection=connmandText="{?=call onereturn(?,?)}"cmd.Parameters.Appendcmd.CreateParameter("@return_value",adInteger,adParamReturnvalue )cmd.Parameters.Append cmd.CreateParameter("@aaa",adInteger,adParamInput )cmd("@aaa")=10cmd.Parameters.Append cmd.CreateParameter("@bbb",adInteger,adParamOutput) cmd.Execute()bbb=cmd("@bbb")rrr=cmd("@return_value")%>作者:ministrybill(生命的烙印)ASP调用ProcedureMicrosoft 的Active Server Pages 即ASP,是一套微软开发的服务器端脚本环境,ASP内含于IIS 和PWS之中,通过ASP我们可以结合 HTML 网页、ASP指令和 ActiveX 元件建立动态、交互且高效的WEB服务器应用程序。
常用的存储过程
常用的存储过程
6. 数据转换和处理:存储过程可以用于执行复杂的数据转换和处理任务。例如,可以创建 一个存储过程,将数据从一个表转移到另一个表,并进行必要的转换和清理。
7. 批处理操作:存储过程可以用于执行批处理操作,处理大量的数据或执行复杂的数据操 作。通过使用循环和条件语句,可以在存储过程中实现灵活的批处理逻辑。
2. 数据查询和报表生成:存储过程可以用于执行复杂的查询操作,从数据库中检索数据, 并生成报表或结果集。这样可以减少客户端代码的复杂性,并提高查询的效率。
常用的存储过程
3. 数据验证和约束:存储过程可以用于验证和强制执行数据的完整性和约束条件。例如, 可以创建一个存储过程,在插入或更新数据之前进行验证,并确保数据满足特定的条件。
常用的存储过程
常用的存储过程(Stored Procedure)是在数据库中预定义的可重复使用的一组SQL语 句。它们可以接受参数,执行特定的任务,并返回结果。以下是一些常用的存储过程:
1. 数据插入、更新和删除:存储过程可以用于执行常见的数据插入、更新和删除操作。通 过将这些操作封装在存储过程中,可以提高性能和安全性。
这只是一些常见的存储过程应用场景,实际上存储过程的用途非常广泛,可以根据具体的 业务需求进行定制和扩展。存储过程的使用可以提高数据库的性能、安全性和可维护性,同 时减少客户端代码的复杂性。
Hale Waihona Puke 4. 事务管理:存储过程可以用于管理数据库中的事务。通过将一系列操作封装在存储过程 中,并使用事务控制语句(如BEGIN TRANSACTION、COMMIT、ROLLBACK等),可以 确保操作的原子性和一致性。
5. 安全控制:存储过程可以用于实现数据库的安全控制机制。通过将敏感的数据库操作封 装在存储过程中,并授予合适的权限,可以限制对数据库的访问和操作。
存储过程简单案例以及使用方法
存储过程简单案例以及使用方法
存储过程是一组预编译的SQL语句的集合,可以接受参数并返回结果。
它们用于在数据库中执行一系列操作,将其封装为一个单元以供重用。
存
储过程具有以下优点:提高性能、提高安全性、提高代码可读性。
下面是一个简单的存储过程示例,用于更新员工工资:
```sql
CREATE PROCEDURE UpdateSalary
AS
BEGIN
UPDATE Employees
END
```
要执行存储过程,可以使用以下语法:
```sql
EXEC UpdateSalary 1, 1000
```
以上语句将调用存储过程`UpdateSalary`,并传递参数值`1`和
`1000`。
存储过程将会将ID为1的员工的薪水增加1000。
存储过程还可以返回结果,例如要获取员工的薪水,可以创建如下存
储过程:
```sql
CREATE PROCEDURE GetSalary
AS
BEGIN
FROM Employees
END
```
要执行具有输出参数的存储过程,并获取结果,可以使用以下语法:```sql
```
在实际应用中,存储过程经常用于执行复杂的、频繁的数据库操作,例如批量插入、更新或删除数据,以及进行数据校验和处理。
通过使用存储过程,可以减少网络通信的开销,提高数据库性能。
总结起来,存储过程是一种在数据库中执行一系列操作的有效方式,并可以接受参数和返回结果。
通过创建存储过程,可以提高数据库性能、安全性和代码可读性。
同时,存储过程还可以在应用程序中重复调用以提高效率。
oracle存储过程12123[最新]
oracle存储过程121232010-01-28Oracle存储过程实例文章分类:数据库create or replace procedure GetRecords(name_out outvarchar2,age_in in varchar2) asbeginselect NAME into name_out from test where AGE = age_in;end;create or replace procedure insertRecord(UserID in varchar2, UserName in varchar2,UserAge in varchar2) isbegininsert into test values (UserID, UserName, UserAge);end;首先,在Oracle中创建了一个名为TEST_SEQ的Sequence对象,SQL 语句如下:create sequence TEST_SEQminvalue 100maxvalue 999start with 102increment by 1nocache;语法应该是比较易懂的,最小最大值分别用 minvalue,maxvalue表示,初始值是102(这个数字是动态变化的,我创建的时候设的是100,后因插入了2条数据后就自动增加了 2),increment当然就是步长了。
在PL/SQL中可以用test_seq.nextval访问下一个序列号,用test_seq.currval访问当前的序列号。
定义完了Sequence,接下来就是创建一个存储过程InsertRecordWithSequence:--这次我修改了test表的定义,和前面的示例不同。
其中,UserID是PK。
create or replace procedure InsertRecordWithSequence(UserID out number,UserName in varchar2,UserAge in number)isbegin insert into test(id, name, age) --插入一条记录,PK值从Sequece获取values(test_seq.nextval, UserName, UserAge);/*返回PK值。
存储过程常用函数总结(不定期更新)
存储过程常用函数总结(不定期更新)存储过程是一组预定义的SQL语句集合,可以接受参数并返回结果。
在存储过程中,我们可以使用许多常用的函数来处理和转换数据。
下面是一些常用函数的总结:1.字符串处理函数-CONCAT:用于合并两个或多个字符串。
-SUBSTRING:用于提取字符串的一部分。
-REPLACE:用于替换字符串中的指定字符。
-CHAR_LENGTH:用于计算字符串的长度。
-UPPER/LOWER:用于将字符串转换为大写/小写。
-TRIM:用于去除字符串首尾的空格。
2.数值处理函数-ROUND:用于将数值四舍五入到指定的小数位数。
-FLOOR/CEILING:用于向下/向上取整。
-ABS:用于计算数值的绝对值。
-MOD:用于计算两个数值的模运算结果。
-RAND:用于生成随机数。
3.日期和时间处理函数-NOW:用于获取当前的日期和时间。
-DATE_FORMAT:用于将日期格式化为指定的格式。
-DATEDIFF:用于计算两个日期之间的天数差。
-DAY/WEEK/MONTH/YEAR:用于提取日期的天/周/月/年。
-ADDDATE/DATE_ADD:用于对日期进行加法运算。
-SUBDATE/DATE_SUB:用于对日期进行减法运算。
4.条件处理函数-IF:用于实现条件判断。
-CASE:用于根据不同的条件执行不同的操作。
-COALESCE:用于返回第一个非NULL值。
-NULLIF:用于判断两个表达式是否相等,若相等则返回NULL。
5.聚合函数-SUM:用于计算指定列的总和。
-AVG:用于计算指定列的平均值。
-COUNT:用于计算指定列的行数。
-MIN/MAX:用于计算指定列的最小/最大值。
-GROUP_CONCAT:用于将指定列的值连接为一个字符串。
6.数据类型转换函数-CAST/CONVERT:用于将一个数据类型转换为另一个数据类型。
-STR_TO_DATE:用于将字符串转换为日期类型。
-DATE_FORMAT:用于将日期类型转换为字符串。
常用的存储过程
常用的“通用存储过程”整理出几个通用的删除、添加、海量级分页等存储过程。
/**************************************************************** ******************** 名字:CommonDeleteProc** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:根据条件语句删除某中的一条或多条记录** 实例:EXEC CommonDeleteProc 'Article','ID=1'***************************************************************** ******************/create PROCEDURE CommonDeleteProc(@tblName varchar(255), -- 表名@strWhere varchar(1500) = '' -- 查询条件(注意: 不要加where))ASset nocount on/* 定义变量*/declare @strSQL varchar(5000) -- 主语句if @strWhere != ''set @strSQL = 'delete from [' + @tblName + '] where ' + @strWhereelseset @strSQL = 'delete from ['+ @tblName + ']'exec (@strSQL)GO/**************************************************************** *********************** 对指定字段进行加1或-1操作,多用于增加阅读次数,回复次数***************************************************************** ********************/CREATE PROCEDURE CommonIncreaseProc(@tblName varchar(255), -- 表名@fldName varchar(255), --列名@fldValue int=1, --列值@strWhere varchar(500))ASset nocount on/* 定义变量*/declare @strSQL varchar(5000) -- 主语句set @strSQL = 'update ['+ @tblName + ']set '+@fldName+'='+@fldName+'+'+@fldValue+' where '+@strWhereexec (@strSQL)GO/**************************************************************** ******************** 名字:CommonInsertProc** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:向某一数据表中插入多个字段及相应值** 实例:EXEC CommonInsertProc 'Article','Title,Content','''标题'',''内容'''***************************************************************** ******************/CREATE PROCEDURE CommonInsertProc(@tblName varchar(255), -- 表名@fldName varchar(500), --列名@fldValue varchar(1500) --列值)ASset nocount on/* 定义变量*/declare @strSQL varchar(5000) -- 主语句set @strSQL = 'Insert into ['+ @tblName + '] ('+@fldName+')values('+@fldValue+')'exec (@strSQL)GO/**************************************************************** *********************************************************** 名字:CommonTwoTableQuery** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:读取两个相关联的表** 实例:EXEC CommonTwoTableQuery'Article','ArticleCategory','A.Title,B.Category','A.CategoryID=B.ID','A.ID desc',1 ***************************************************************** ********************************************************/ CREATE procedure CommonTwoTableQuery(@ATableName nvarchar(50),@BTableName nvarchar(50),@ABColumns nvarchar(800),@strWhere nvarchar(400),@strOrder nvarchar(100)=null,@ReturnRowCount int=0)asset nocount ondeclare @strSQL nvarchar(4000)IF(@ReturnRowCount>0)SET @strSQL='select top '+str(@ReturnRowCount)+' 'ELSESET @strSQL='select 'SET @strSQL=@strSQL+@ABColumns+'from '+@ATableName+' A,'+@BTableName+' B where '+@strWhereIF @strOrder IS NOT NULLBEGINSET @strSQL=@strSQL+' order by '+@strOrderENDexec(@strSQL)GO/**************************************************************** ***************************************************************** ************************* 名字:CommonTwoTable_Page** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:分页读取两个相关联的表** 实例:exec CommonTwoTable_Page'Article','ArticleCategory','A.Title,B.Category','A.CategoryID=B.ID','A.IDDesc','A.ID',2,1,0***************************************************************** ***************************************************************************************/CREATE procedure CommonTwoTable_Page(@ATableName nvarchar(100),@BTableName nvarchar(100),@ABColumns nvarchar(800),@strWhere nvarchar(400),@strOrder nvarchar(100)=null,@strNotInColumn nvarchar(100),@PageSize int=10,@CurrentPage int=1,@doCount bit = 0 -- 返回记录总数, 非0 值则返回)asset nocount ondeclare @strSQL nvarchar(4000)declare @tmpOrderBy nvarchar(200)if @doCount != 0BEGINSET @strSQL='select count(*) from '+@ATableName+' A,'+@BTableName+' B where '+@strWhereENDELSEBEGINSET @strSQL='select top'+str(@PageSize)+' '+@ABColumns+' from '+@ATableName+' A,'+@BTableName +' B where '+@strWhereSET @strSQL=@strSQL+' and '+@strNotInColumn+' not in (select top'+str((@CurrentPage-1)*@PageSize)+' '+@strNotInColumn+' from '+@ATableNa me+' A,'+@BTableName+' B where '+@strWhereIF @strOrder IS NOT NULLBEGINSET @tmpOrderBy=' order by '+@strOrderENDELSEBEGINSET @tmpOrderBy=''ENDSET @strSQL=@strSQL+@tmpOrderBy+')'+@tmpOrderByENDexec(@strSQL)GO/**************************************************************** ***************************************************************** ************************* 名字:CommonTwoTable_Page_LEFT** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:分页读取两个相关联的表** 实例:exec CommonTwoTable_Page_Left'Article','ArticleCategory','A.Title,B.Category','A.CategoryID=B.ID','A.IDDesc','A.ID',2,1,0***************************************************************** ***************************************************************** **********************/CREATE procedure CommonTwoTable_Page_Left(@ATableName nvarchar(100),@BTableName nvarchar(100),@ABColumns nvarchar(800),@strWhere nvarchar(400),@strOrder nvarchar(100)=null,@strNotInColumn nvarchar(100),@PageSize int=10,@CurrentPage int=1,@doCount bit = 0 -- 返回记录总数, 非0 值则返回)asset nocount ondeclare @strSQL nvarchar(4000)declare @tmpOrderBy nvarchar(200)if @doCount != 0BEGINSET @strSQL='select count(*) from '+@ATableName+' A LEFTJOIN '+@BTableName+' B ON '+@strWhereENDELSEBEGINSET @strSQL='select top'+str(@PageSize)+' '+@ABColumns+' from '+@ATableName+' A LEFTJOIN '+@BTableName+' B ON '+@strWhereSET @strSQL=@strSQL+' and '+@strNotInColumn+' not in (select top'+str((@CurrentPage-1)*@PageSize)+' '+@strNotInColumn+' from '+@ATableNa me+' A LEFT JOIN '+@BTableName+' B ON '+@strWhereIF @strOrder IS NOT NULLBEGINSET @tmpOrderBy=' order by '+@strOrderENDELSEBEGINSET @tmpOrderBy=''ENDSET @strSQL=@strSQL+@tmpOrderBy+')'+@tmpOrderByENDexec(@strSQL)GO/**************************************************************** ****************************************** 名字:NoPagesPro** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:根据条件语句查询某表中所有记录,可自定义排序** 实例:EXEC NoPagesPro 'Article','ID,Title,AddTime','ID>20','order by AddTime Desc,CheckPassed desc'***************************************************************** ****************************************/CREATE PROCEDURE [dbo].NoPagesPro(@tblName varchar(255), -- 表名@strGetFields varchar(1000) = '*', -- 需要返回的列@strWhere varchar(1500) = '', -- 查询条件(注意: 不要加where)@strOrder varchar(400)='' --排序)ASset nocount on/* 定义变量*/declare @strSQL varchar(5000) -- 主语句if @strWhere != ''set @strSQL = 'select '+@strGetFields+ ' from [' + @tblName + '] where ' +@strWhere + ' '+ @strOrderelseset @strSQL = 'select '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder exec (@strSQL)GO/**************************************************************** ****************************************** 名字:NoPagesTopPro** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:根据条件语句查询某表中前多少记录,可自定义排序** 实例:EXEC NoPagesTopPro 'Article','ID,Title,AddTime','ID>20','AddTime Desc,CheckPassed desc',8***************************************************************** ****************************************/CREATE PROCEDURE [dbo].NoPagesTopPro(@tblName varchar(255), -- 表名@strGetFields varchar(1000) = '*', -- 需要返回的列@strWhere varchar(1500) = '', -- 查询条件(注意: 不要加where)@strOrder varchar(400)='', --排序@topNum int=10 --前几条)ASset nocount on/* 定义变量*/declare @strSQL varchar(5000) -- 主语句declare @strTop varchar(50) --前几条if @topNum >0set @strTop='top '+str(@topNum)+' 'elseset @strTop=''if @strWhere != ''set @strSQL = 'select '+@strTop+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' order by '+ @strOrderelseset @strSQL = 'select '+@strTop+@strGetFields+ ' from ['+ @tblName + '] order by '+ @strOrderexec (@strSQL)GO/**************************************************************** ********************************************** 名字:PagesPro** 作者:Meilixueshan** 创建日期:2007年10月19日** 描述:单表通用分页查询(海量级),单个字段排序** 实例:EXEC PagesPro'Article','ID,Title,AddTime','ID',20,1,0,1,'CheckPassed=1'***************************************************************** ********************************************/CREATE PROCEDURE [dbo].PagesPro(@tblName varchar(255), -- 表名@strGetFields varchar(1000) = '*', -- 需要返回的列@fldName varchar(255)='', -- 排序的字段名@PageSize int = 10, -- 页尺寸@PageIndex int = 1, -- 页码@doCount bit = 0, -- 返回记录总数, 非0 值则返回@OrderType bit = 0, -- 设置排序类型, 非0 值则降序@strWhere varchar(1500) = '' -- 查询条件(注意: 不要加where))AS/* 定义变量*/declare @strSQL varchar(5000) -- 主语句declare @strTmp varchar(110) -- 临时变量declare @strOrder varchar(400) -- 排序类型if @doCount != 0beginif @strWhere !=''set @strSQL = 'select count(*) as Total from [' + @tblName + ']where '+@strWhereelseset @strSQL = 'select count(*) as Total from [' + @tblName + ']'end--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用存储过程集锦,都是一些mssql常用的一些,大家可以根据需要选择使用。
=================分页==========================/*分页查找数据*/CREATE PROCEDURE [dbo].[GetRecordSet]@strSql varchar(8000),--查询sql,如select * from [user]@PageIndex int,--查询当页号@PageSize int--每页显示记录ASset nocount ondeclare @p1 intdeclare @currentPage intset @currentPage = 0declare @RowCount intset @RowCount = 0declare @PageCount intset @PageCount = 0exec sp_cursoropen @p1 output,@strSql,@scrollopt=1,@ccopt=1,@rowcount=@r owCount output --得到总记录数select @PageCount=ceiling(1.0*@rowCount/@pagesize) --得到总页数,@currentPage=(@PageIndex-1)*@PageSize+1select @RowCount,@PageCountexec sp_cursorfetch @p1,16,@currentPage,@PageSizeexec sp_cursorclose @p1set nocount offGO=========================用户注册============================/*用户注册,也算是添加吧*/Create proc [dbo].[UserAdd](@loginID nvarchar(50), --登录帐号@password nvarchar(50), --密码@email nvarchar(200) --电子信箱)asdeclare @userID int --用户编号--登录账号已经被注册if exists(select loginID from tableName where loginID = @loginID)beginreturn -1;end--邮箱已经被注册else if exists(select email from tableName where email = @email)beginreturn -2;end--注册成功elsebeginselect @userID = isnull(max(userID),100000)+1 from tableNameinsert into tableName(userID,loginID,[password],userName,linkNum,address,email,createTime,status) values(@userID,@loginID,@password,'','','',@email,getdate(),1)return @userIDend==========================sql server系统存储过程===================–1.给表中字段添加描述信息Create table T2 (id int , name char (20))GOEXEC sp_addextendedproperty 'MS_Description', 'Employee ID', 'user', dbo, 'table', T2, 'column', id EXEC sp_updateextendedproperty 'MS_Description', 'this is a test', 'user', dbo, 'table', T2, 'column', id –2.修改数据库名称EXEC sp_renamedb 'old_db_name', 'new_db_name'–3.修改数据表名称和字段名称EXEC sp_rename 'old_table_name', 'new_table_name'–修改数据表名称EXEC sp_rename 'table_name.[old_column_name]', 'new_column_name', 'COLUMN'–修改字段名称–4.给定存储过程名,获取存储过程内容exec sp_helptext sp_name/*以下是有关安全控制的系统存储过程或 SQL 语句,详细语法查阅《联机丛书》相关内容*/–创建新的 SQL Server 登录,使用户得以连接使用 SQL Server 身份验证的 SQL Server。
XEC sp_addlogin @loginame = '', @passwd = '', @defdb = '', @deflanguage = NULL, @sid = NULL, @encryptopt = NUL –使 Windows NT 用户或组帐户得以使用 Windows 身份验证连接到 SQL Server。
EXEC sp_grantlogin @loginame = ''–删除 SQL Server 登录,以阻止使用该登录名访问 SQL Server。
EXEC sp_droplogin @loginame = ''–阻止 Windows NT 用户或组连接到 SQL Server。
EXEC sp_denylogin @loginame = ''–从 SQL Server 中删除用 sp_grantlogin 或 sp_denylogin 创建的 Windows NT 用户或组的登录项。
EXEC sp_revokelogin @loginame = ''–更改登录的默认数据库。
EXEC sp_defaultdb @loginame = '', @defdb = ''–更改登录的默认语言。
EXEC sp_defaultlanguage @loginame = '', @language = ''–添加或更改 SQL Server 登录密码。
EXEC sp_password @old = '', @new = '', @loginame = ''–添加服务器角色新成员。
EXEC sp_addsrvrolemember @loginame = '', @rolename = ''–添加服务器角色某成员。
EXEC sp_dropsrvrolemember @loginame = '' , @rolename = ''–为 SQL Server 登录或 Windows NT 用户或组在当前数据库中添加一个安全帐户,并使其能够被授予在数据库中执行活动的权限(授默认的“public”数据库角色)。
EXEC sp_grantdbaccess @loginame = '', @name_in_db = NULL–或EXEC sp_adduser @loginame = '', @name_in_db = NULL, @grpname = ''–从当前数据库中删除安全帐户。
EXEC sp_revokedbaccess @name_in_db = ''–或EXEC sp_dropuser @name_in_db = ''–在当前数据库创建新数据库角色。
EXEC sp_addrole @rolename = '', @ownername = ''–在当前数据库删除某数据库角色。
EXEC sp_droprole @rolename = ''–在当前数据库中添加数据库角色新成员。
EXEC sp_addrolemember @rolename = '', @membername = ''–在当前数据库中删除数据库角色某成员。
EXEC sp_droprolemember @rolename = '', @membername = ''–权限分配给数据库角色、表、存储过程等对象–1、授权访问GRANT–2、拒绝访问DENY–3、取消授权或拒绝REVOKE–4、Sample(pubs):GRANT SELECT ON authors TO LimperatorDENY SELECT ON authors TO LimperatorREVOKE SELECT ON authors TO Limperator====================数据库还原的存储过程============SQL codecreate proc killspid (@dbname varchar(20))asbegindeclare @sql nvarchar(500)declare @spid intset @sql='declare getspid cursor forselect spidfrom sysprocesseswhere dbid=db_id('''+@dbname+''')'exec (@sql)open getspidfetch next from getspidinto @spidwhile @@fetch_status <>-1beginexec('kill '+@spid)fetch next from getspidinto @spidendclose getspiddeallocate getspidendGO作用:杀掉传入数据库中的活动进程以进行备份还原等独占操作===================阿拉伯数字转大写中文=============例:输入12345,程序给出:壹万贰仟叁佰肆拾伍例:输入10023040,程序给出:壹仟另贰万叁仟另肆拾解决方案之一(在SqlServer2000中测试通过):SQL codeCREATE FUNCTION fun_cgnum(@num INT)RETURNS VARCHAR(100)ASBEGINDECLARE @temp INT,@res INT,@i TINYINTDECLARE @str VARCHAR(100),@no VARCHAR(20),@unit VARCHAR(16) SELECT @str='',@no='另壹贰叁肆伍陆柒捌玖',@unit='拾佰仟万拾佰仟亿'SET @temp=@numSELECT @i=0,@res=@temp%10,@temp=@temp/10WHILE @temp>0BEGINIF @i=0SET @str=SUBSTRING(@no,@res+1,1)ELSESET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str SELECT @res=@temp%10,@temp=@temp/10SET @i=@i+1ENDSET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str SET @str=REPLACE(@str,'另拾','另')SET @str=REPLACE(@str,'另佰','另')SET @str=REPLACE(@str,'另仟','另')SET @str=REPLACE(@str,'另拾','另')SET @str=REPLACE(@str,'另万','万')WHILE @i>0BEGINSET @str=REPLACE(@str,'另另','另')SET @i=CHARINDEX('另另',@str)ENDSET @str=REPLACE(@str,'另万','万')SET @str=REPLACE(@str,'亿万','亿')IF RIGHT(@str,1)='另'SET @str=LEFT(@str,LEN(@str)-1)RETURN @strENDGO--测试:有0和没有0的情况SELECTdbo.fun_cgnum(900000000),dbo.fun_cgnum(903002051),dbo.fun_cgnum(90 3002050)PS:有兴趣的朋友可以继续考虑有小数点以及添加单位(元/角/分)的情况。