SYBASE存储过程

合集下载

Sybase数据库教程

Sybase数据库教程

数据定义语言(DDL)
包括CREATE、ALTER、DROP等语句,用 于定义和管理数据库对象。
数据控制语言(DCL)
包括GRANT、REVOKE等语句,用于控制 对数据库对象的访问权限。
查询优化策略分享
索引优化
合理使用索引可以大大提 高查询效率,包括聚集索 引和非聚集索引。
分区技术
将大表分成若干个小表, 可以提高查询和维护的效 率。
创建和删除数据库对象
创建数据库
使用`CREATE DATABASE`语句,指 定数据库名称、大小、增长参数等。
删除数据库
使用`DROP DATABASE`语句,注意 要谨慎操作,避免误删重要数据。
创建表
使用`CREATE TABLE`语句,定义表 结构、字段类型、约束等。
删除表
使用`DROP TABLE`语句,可以删除 整个表及其所有数据。
通过执行计划分析SQL语句的执行效率,找出可能的性能瓶颈,如 缺少索引、不必要的表扫描等。
数据库日志分析
定期检查数据库日志,了解数据库的运行状况,发现潜在的性能问 题。
优化数据库设计
规范化设计
通过数据库规范化设计,消除数据冗余,提高数据一 致性和完整性。
索引优化
根据查询需求合理创建索引,避免全表扫描,提高查 询效率。
能优化建议,提供索引、分区等优化方案。
第三方性能调优工具
03
根据需要选择适合的第三方性能调优工具进行更深入的性能分
析和优化。
THANKS
感谢观看
别进行优化,提高系统性能。
安全性
Sybase数据库支持多种操作系统 和硬件平台,提供了丰富的API 和开发工具,方便用户进行二次 开发。

sybase基础知识(新手必看)

sybase基础知识(新手必看)
配置Java环境变量。 编写Java代码连接Sybase数据库,包括加载驱动程序、创建连接、执行
SQL语句等。 处理连接过程中的异常和错误。
常用客户端工具介绍及使用方法
Sybase Central 管理Sybase ASE、IQ、SQL Anywhere等数据库。 提供图形化界面进行数据库操作,如创建表、查询数据等。
02
SQL语言基础
数据类型与变量定义
数值型
包括整数、浮点数等。
变量定义
使用DECLARE语句定义变量,指定变量名 和数据类型,可以使用SET或SELECT语句 为变量赋值。
布尔型
表示真或假的值。
字符型
包括定长字符、变长字符等。
日期型
包括日期、时间、日期时间等。
运算符和表达式使用
算术运算符
进行数值计算,如加、减、乘、 除等。
表空间管理策略
创建表空间
使用`CREATE TABLESPACE`语句,指定 表空间名称、数据文件路径及大小等参数,
创建新的表空间。
A 表空间概念
表空间是Sybase数据库中用于存储 数据的逻辑容器,可以包含一个或
多个数据文件。
B
C
D
删除表空间
使用`DROP TABLESPACE`语句,可以删 除指定的表空间及其包含的所有数据。
安装步骤及注意事项
安装步骤
下载适用于目标操作系统的Sybase安装程序。
运行安装程序并按照提示进行安装,选择安装类 型(如典型安装、自定义安装等)。
安装步骤及注意事项
01
配置数据库服务器参数,如端口号、数据库文件存 储路径等。
02
创建数据库实例并启动数据库服务。
03

sybase数据库入门教程

sybase数据库入门教程

创建和执行存储过程示例
END; ```
调用存储过程的语法
创建和执行存储过程示例
```sql
EXECUTE procedure_name [parameter1, parameter2, ...];
创建和执行存储过程示例
```
示例:创建一个简单的存储过程,用于查询指定表中的数据。
创建和执行存储过程示例
AFTER INSERT
创建和使用触发器示例
AS
BEGIN
INSERT INTO AuditLog (Operation, TableName, ChangedData, ChangedBy, ChangedOn)
创建和使用触发器示例
创建和使用触发器示例
END;
```
当在Employees表中插入新数 据时,该触发器会自动执行, 并将相关信息记录到AuditLog 表中。
创建和使用触发器示例
END;
01
02
```
03
示例:创建一个触发器,当在Employees表中插入新数据时, 自动在AuditLog表中记录操作信息。
创建和使用触发器示例
```sql
CREATE TRIGGER EmployeeInsertTrigger
创建和使用触发器示例
ON Employees
触发器概念及作用
01
02
03
触发器(Trigger)是一种特殊的存储 过程,它与表相关联,当表上发生特定 事件(如INSERT、UPDATE或DELETE) 时自动执行。
触发器可以帮助我们实现复杂的业务逻 辑,保证数据的完整性和一致性,以及 实现自动化操作。
与存储过程不同,触发器不需要显式调 用,而是由数据库系统自动执行。

Sybase数据库教程pdf

Sybase数据库教程pdf
根据差异备份恢复到某个时间点的状态,只需恢复最新的完全 备份和差异备份。
利用事务日志备份恢复到某个特定的时间点,需要先恢复到某 个完全备份的状态,然后应用事务日志进行恢复。
数据迁移与转换
数据迁移
将数据从一个数据库系统迁移到另一个数据库系统,需要 考虑数据格式、数据类型、索引、存储过程等因素的转换 问题。
删除数据表
使用`DRO据。
查看数据表结构
使用`DESCRIBE`或`SHOW COLUMNS`等命令查看数据表的结构和 字段信息。
数据的增删改查操作
第一季度
第二季度
第三季度
第四季度
插入数据
使用`INSERT INTO`语 句向数据表中插入新的 记录,需指定要插入的 字段和对应的值。
事务处理与并发控制
• 事务控制语句:BEGIN TRANSACTION、 COMMIT、ROLLBACK。
事务处理与并发控制
定义
并发控制是确保多个事务同时存取数据库中同一数据时不 破坏事务的隔离性和统一性以及数据库的统一性的技术。
锁机制
Sybase数据库采用锁机制来实现并发控制,包括共享锁和 排他锁。
ABCD
分区表
将大表分割成较小的、更易于管理的片段,称为 分区,以提高查询性能和管理效率。
合理的数据类型选择
选择最合适的数据类型可以节省存储空间,提高 数据处理速度。
系统性能监控与调优
监控数据库性能
使用Sybase提供的性能监控工具,如 Monitor Server和Database
Performance Monitor,实时监控数据库 性能指标。
使用索引
对经常需要查询的列和 WHERE子句中的列建立索引 ,可以大大提高查询速度。

SybaseIQ存储过程学习笔记

SybaseIQ存储过程学习笔记

实践:SYBASE IQ存储过程学习笔记1.存储过程存储过程将过程化的SQL语句存储在数据库中,供所有程序使用。

存储过程中可以包含控制语句,如LOOP循环语句、IF和CASE这样的条件语句。

存储过程通过CALL语句进行调用,使用变量传入参数和返回结果。

可以返回结果集,也可以调用其他的存储过程。

2.存储过程和函数的区别自定义函数是只能返回单一值的特定的存储过程。

函数不修改传入的参数,但是可以使其用于查询和其他SQL语句之中。

3.存储过程的调试参见附录C Debugging Logic in the Database4.存储过程概要✓常用的存储过程✓创建存储过程✓修改存储过程✓调用存储过程✓删除存储过程✓存储过程的访问控制✓返回值♒常用的存储过程sp_iqprocedure此存储过程可以显示系统和用户自定义的存储过程sp_iqprogram显示存储过程的参数信息,包括结果集变量和SQLSTATE/SQLCODE错误值♒创建存储过程CREATE PROCEDURE new_dept (IN id INT, IN name CHAR(35), IN head_id INT )BEGIN1INSERT INTO DBA.department(dept_id, dept_name, dept_head_id)VALUES(id, name, head_id);END♒修改存储过程使用SQL语句ALTER PROCEDURE,将整个新的存储过程包含其中。

必须重新给修改后的存储过程赋予用户权限。

♒调用存储过程CALL new_dept(210, ‘Eastern Sales’, 902);2♒删除存储过程DROP PROCEDURE new_dept♒存储过程的访问控制见注(2)♒返回值可以通过三种方式传回值:使用OUT或者INOUT返回值;返回结果集;使用RETURN语句返回单值。

→使用OUT和INOUT返回值3CREATE PROCEDURE AverageSalary( OUT avgsal NUMERIC (20,3) )BEGINSELECT AVG( salary ) INTO avgsal FROM employee;END→返回结果集CREATE PROCEDURE SalaryList (IN department_id INT)RESULT ( "Employee ID" INT, "Salary" NUMERIC(20,3) )41复合语句,放在BEGIN和END之间;复合语句可以相互嵌套;复合语句用于将多个语句组合成一个单元,其中的SQL语句用分号分隔;除了最后一个分号,其他都是必须的;复合语句中声明的局部变量只在复合语句中可;可以在BEGIN后面加上ATOMIC,将复合语句声明为原子性,此时就不可使用COMMIT、ROLLBACK和ROLLBACK TO SAVEPOINT.2必须赋予EXECUTE权限才可以执行此存储过程,GRANT EXECUTE ON new_dept TO another_user;REVOKE EXECUTE ON new_dept FROM another_user3调用之前,可以先声明一个变量保存结果,语句如下CREATE VARIABLE Average NUMERIC(20,3)4存储过程还可以返回多个同类型的结果集,必须在客户端中启用返回多个结果集的支持。

Sybase数据库审计介绍

Sybase数据库审计介绍

审计功能是数据库管理系统安全性重要的一部分。

通过审计功能,凡是与数据库安全性相关的操作均可被记录下来。

只要检测审计记录,系统安全员便可掌握数据库被使用状况。

例如,检查库中实体的存取模式,监测指定用户的行为。

审计系统可以跟踪用户的全部操作,这也使审计系统具有一种威慑力,提醒用户安全使用数据库。

审计系统的构成∙Sybsecurity 数据库∙存放在Sybsystempocs中的一组系统存储过程∙Master库中的配置选项∙内存审计队列∙审计处理程序Sybsecurity数据库Sybsecurity库是SQLServer审计系统的基础,它是由审计系统的安装程序Sybinit 来建立的,除包括Model库中所有表之外,还另有两张系统表。

∙Sysaudits 审计记录表。

所有审计信息均被记载在这个表中∙Sysauditoptions 审计选择设置记录系统存储过程:支持审计系统的操作,设置审计内容及审计功能Master库的配置选项设置内存审计列队大小内存审计队列当定义的审计事件发生时,审计记录首先被放在内存审计队列,在它被审计处理程序存放审计记录之前,将一直存在这里。

如果系统发生故障,内存审计队列记录可能丢失。

内存审计队列溢出会影响整个系统的性能。

当审计队列没有空间时,如果用户执行一个被定义的审计的操作,那么审计处理程序将进入一种睡眠状态,等待有足够的内存空间才运行用户的命令。

内存审计队列空间可由sp-configure来设置,参数为audit queue size 。

审计数据流图1.用户将要在TableA中插入记录,Insert已被定义为审计事件。

2.检查操作权限,关于这条命令和处理的信息被记录在内存审计队列。

3.审计处理过程被调度的,将内存审计队列的信息写入Sybsecurity库的Sysaudits表中。

4.审计信息被存在Sysaudit表中,这些信息随系统运输愈来愈多,如果需要的话,可将这些数据倒到另外一个表中存放起来,或挎贝到磁带上存放。

SybaseIQ基础信息整理汇总

SybaseIQ基础信息整理汇总

发现进程死掉,如何杀掉?查看环境变更配置是否正确?查看内存大小,CPU ?一般生产系统容易出现的故障,如何解决的?1.IQ数据库适用场合和不适用场合适用场合:Decision support system (DSS)决策支持系统Distributed data mart分布式数据集市Data warehouse数据仓库不适用场合:实时数据更新,在线事务处理不适合OLTP(联机事务处理系统)。

适合OLAP(联机分析处理, OLAP是数据仓库系统的主要应用)2.IQ特点1.高压缩比2.列存储,提高访问效率3.独特的索引结构(一般数据库使用B-Tree,IQ采用BitMap和BitWise结构)4.高效的数据加载3.IQ数据库几个数据文件的名字、作用IQ 存储:数据库名.iq信息日志:数据库名.iqmsg临时存储:数据库名.iqtmp目录存储:数据库名.db事务日志:数据库名.logIQ表定义保存在元数据表空间(目录存储)数据在IQ数据表空间中带索引存放4.创建用户数据库1.启动utility 数据库(start_asiq -n myserver -gu utility_db)或asiqdemo库(start_asiq @$ASDIR/asiqdemo.cfg $ASDIR/asiqdemo.db)2.通过IQ的客户端连接asiqdemo后,执行以下脚本建库。

create database '/home/sybiq/hdsdb/hdsdb.db' --(目录存储,必须在文件系统上)log on '/home/sybiq/hdsdb/hdsdb.log' --(事务日志)case respectpage size 4096java onjconnect onCOLLATION 'EUC_CHINA'iq path '/dev/rlvhdsdata1' --(IQ存储,可在裸设备和文件系统)iq page size 131072message path '/home/sybiq/hdsdb/hdsdb.iqmsg' –(信息日志)temporary path '/dev/rlvhdstmp1'; --(临时表空间,可为裸设备或文件系统)commit;5.cfg配置/*hdsdb.cfg*/-n hdsdb169 –服务名-c 48m -- minimum cache size for Catalog Store-gd dba-gm 100 –用户并发数-gp 4096 --Catalog store page size-ti 4400 --客户端超时时间(分)-tl 300 –网络超时时间(秒)-x tcpip{port=2648} –访问端口-iqtss 1000-iqmc 800 --main cache size(M)-iqtc 1200 --temporary cache size(M)6.环境变量配置set option public.minimize_storage='on';set option public.load_memory_mb=500;set option public.notify_modulus=1000000;set option public.append_load='OFF';set option Public.Force_No_Scroll_Cursors ='ON';set option Public.query_temp_space_limit=0;set option Public.Disk_Striping = 'ON';set option Public.Disk_Striping_Packed = 'ON' ;set option public.query_plan = 'OFF';set option Public.Query_Detail ='OFF';set option Public.AUTO_COMMIT='ON';set option Public.CHAINED='OFF';SET OPTION Public.DA TE_FORMAT = 'YYYY-MM-DD';SET OPTION Public.TIME_FORMAT = 'HH.NN.ss';SET OPTION Public.TIMESTAMP_FORMAT = 'YYYY-MM-DD-HH.NN.ss.SSSSSS'; 7.启动和关闭IQ启动IQ:start_asiq start_asiq @asiqdemo.cfg asiqdemo.db关闭IQ:stop_asiq命令模式: dbstop启动utility数据库:start_asiq –n myserver –gu utility.db8.查看IQ进程,杀进程查看进程:ps -ef|grep sybiq杀进程:kill -9 1171524(对应的进程号)9.增加用户1.通过Sybase Central图形化操作2.通过sp_iqaddlogin(loginname, password)存储过程3.通过grant语句(GRANT CONNECT TO hds IDENTIFIED BY hds;)10.LOAD加载数据LOAD TABLE customer(customer_id '|',cust_type '|',organization '|',contact_name '|',contact_phone '|',address '|',city '|',state_province '|',postalcode '|',country '\x0a'FROM '/work/data/customer1.dat'ESCAPES OFFQUOTES OFF;(这两个参数必须要有)其他参数参考相关资料11.卸载(导出)数据1.客户端导出select * from employee ># empfile.txt,最大为2G2.服务器导出,最大为128Gset temporary option TEMP_EXTRACT_NAME1='/export/home/sybase/data/customer.dat';set temporary option TEMP_EXTRACT_COLUMN_DELIMITER='|';set temporary option TEMP_EXTRACT_BINARY='OFF';set temporary option TEMP_EXTRACT_SW AP='OFF';Select * from residential_customer;12.索引类型,创建索引FP索引(默认创建的,不能被显示删除,需要通过删除表的列来删除该索引)LF索引(适用于唯一值小于1500的列)HNG索引HG索引(适用于唯一值大于1500的列;可跨多列;如将列定义为主键,自动创建HG 索引)CMP索引WD索引(主要用于文本匹配,CONTAINS和LIKE操作中)DA TE索引DTTM索引TIME索引创建索引命令,例:CREATE HG INDEX cust_customer_id_hg ON customer(customer_id)13.备份和恢复数据库三种备份方式Full全备份Full backup of Catalog StoreFull backup of IQ StoreIncremental增量备份Full backup of Catalog StoreBacks up changes to IQ Store since last IQ backup of any typeIncremental-since-full全备份后的增量备份Full backup of Catalog StoreBacks up changes to IQ Store since last full IQ backup备份命令BACKUP DATABASE... [CRC ON | OFF]... [ATTENDED ON | OFF]... [BLOCK FACTOR integer]... [{FULL|INCREMENTAL|INCREMENTAL SINCE FULL}]... TO 'archive_device' [SIZE #_of_KB][ STACKER #_of_tapes_in_stack] ...[WITH COMMENT ’string’]恢复前提1.有DBA权限2.连接到utility_db database3.对于完全恢复,.db和.log文件不能存在4.对于增量恢复,.db和.log必须存在恢复命令RESTORE DA TABASE 'db_file'FROM 'archive_device'[FROM archive_device]...14.重要存储过程sp_iqcontext显示当前执行的语句和活动的连接sp_iqstatus显示数据库的多种状态信息sp_iqdbsize 显示当前数据库的大小sp_iqdbspace显示每个表空间的详细信息,包括它的文件ID,文件名,大小,使用的百分比以及读写状态等sp_iqcheckdb检测当前数据库的可用性及修复索引sp_iqconnection显示连接和版本信息,包括哪个用户正在使用的临时表空间,用户保持的版本信息,连接状态,数据库版本状态等sp_iqtable 显示表的详细信息sp_iqtablesize 显示指定表的大小sp_iqaddlogin、sp_iqdroplogin 增加删除用户sp_iqindex ,sp_iqindex_alt列出所有索引15.远程执行SQL dbisqldbisql -c "uid=DBA;pwd=SQL;eng=SERV1_asiqdemo;links=tcpip(host=SERV2;port=1234)" 16.基础SQL语句select,insert,update等基本的操作增加字段:ALTER TABLE customer ADD country char(20)删除字段:ALTER TABLE customer DROP cust_title增加表空间:CREATE DBSPACE mydb_2 AS 'e:\\s2\data\mydb_2.iq'IQ STORE SIZE 200 数据类型转换:castCase when语句17.常用调度脚本数据库重启脚本数据库备份脚本数据入库调度流程脚本18.Sybase安装(了解)SYBASE IQ for AIX软件要求:IQ126_for_aix_64bit.tarEBF12693.tar安装环境:AIX 5.2 64Bit安装步骤:1.建立起安装IQ的用户,以及IQ安装的文件系统;2.在安装主目录下,vi .profile文件,将当前目录在profile时面export.如:SYBASE="/home/sybiq"Export SYBASE3.将安装程序和补丁程序解压;Tar –xvf IQ126_for_aix_64bit.tar4.解压后,可以查看readme.txt,了解整个安装过程,也可能直接安装,直接执行Sybinstall如:% ./sybinstall5.安装完安装程序后,必须配置环境变量,将% source $SYBASE/ASIQ-12.6/ASIQ-12_6.sh 复制到IQ用户的环境变量.profile中。

sybase存储过程写法

sybase存储过程写法

sybase存储过程写法
Sybase 是一个关系型数据库管理系统,其存储过程是存储在数据库中的一组预编译的 SQL 语句,可以接受参数并返回结果。

以下是一个简单的Sybase 存储过程的示例:
```sql
CREATE PROCEDURE GetEmployeeCount
DepartmentId INT
AS
BEGIN
SELECT COUNT() AS TotalCount
FROM Employees
WHERE DepartmentId = DepartmentId
END
```
在这个例子中,存储过程名为 "GetEmployeeCount",它接受一个名为"DepartmentId" 的整数参数。

存储过程内部执行一个 SELECT 查询,计算指定部门的员工数量,并将结果作为 "TotalCount" 返回。

要调用这个存储过程,可以使用以下语句:
```sql
EXEC GetEmployeeCount DepartmentId = 1;
```
这将执行存储过程,并将 "DepartmentId" 参数设置为 1,计算出该部门的员工数量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程 是存储在数据库中
并按名字来调用执行的一组SQL语 句。
proc_mБайду номын сангаасne
insert .... if @@error!=0 rollback raiserror ....
isql
execute proc_mine
当前 数据库
存储过程的优点
• • • • • • 使用存储过程可加快运行速度 可减少网络交通 可重用、可共享性 存储过程也是一种安全机制 使用存储过程实现数据库完整性 提高数据与应用的独立性
流控制语言
流控制语句控制SQL语句的执行顺序,这在存储 过程、触发器、批中非常有用。流控制关键字(命令 )包括: • IF ELSE 条件执行命令 • BEGIN END 将一组SQL语句作为一个语句块 • WHILE 循环执行相同的命令 • RETURN 无条件退出 • WAITFOR 依赖于某一事件的发生而执行 • GOTO N 转向已定义的语句标号处,也是 流控制命令。但不提倡使用GOTO命 令,以便使代码结构化。
执行存储过程
• 语法: [exec[ute]] procedure_name . . .
查看、改名和删除存储过程
• 查看存储过程 查看创建存储过程的源代码,使用: sp_helptext procedure_name 查看存储过程所依赖的表和视图信息,使用: sp_depends procedure_name
下面列出部分常用的全局变量信息:
全局变量 @@error @@rowcount(常用) @@version 赋给的值 由最近一个语句产生的错误号 被最近一个语句影响的行数 SQL Server的版本号
@@max_connections 最大用户个数 @@Servername
允许与该SQL Server连接的
创建存储过程
• create proc procedure_name as begin SQL_statements [return] end • 存储过程被放在当前正在使用的数据库中。 • 在存储过程中可以引用在其他数据库中的对象 • 创建存储过程(create proc)语句不能与其他的SQL 语句在同一个批中,即创建存储过程语句必须单独 成为一个批。 • 在存储过程中可以包含SQL语句,但是不能包含: use, create view, create rule, create default, create proc, create trigger
• 删除存储过程 语法:drop proc procedure_name 例: 删除已创建的存储过程reports: drop proc reports
存储过程的输入参数和参数的传递
输入参数(Input Parameters) 是指由调用程序向 存储过程 提供的变量值。它们在创建存储过程语 句中被定义,而 在执行该存储过程语句中给出相 应的变量值。使用输入 参数的优点是使存储过程 变得更加灵活。 语法: create proc procedure_name (@parameter_name datatype [, @parameter_name datatype...]) as begin SQL_statements return end
为 Server 方
@@version @@servername @@max_connections 为每个进程
@@rowcount,_@@error @@rowcount,_@@error
• 全局变量 (Gloabal Variable )是SQL Server系统 提供并赋值的变量。用户不能建立全局变量,也不能 使用SELECT语句去修改全局变量的值。全局变量的名 字用@@开始。大多数全局变量的值报告本次SQL Server启动后发生的系统活动,可以使用系统存储过 程sp_monitor显示全局变量的当前值。通常全局变量 的值赋给在同一批中的局部变量,以便保存和作进一 步处理
结果 SQL Server /11.0/P/Sun4/OS4.1.x/1/OPT/Fri Nov 3 14:33:54 PST 1995 ( 1 row affected ) ( 1 row affected ) title_id exists with price of -------------19.99 ( 1 row affected ) 2010 年7月30号看到此
举例: 创建带参数的存储过程 create proc proc_author_addr (@lname varchar(40)) as begin select au_id, au_fname, au_lname, phone, address, city, state, postalcode from authors where au_lname = @lname return -- 在调用程序的执行存储过程命令中,将相应的值 传递给 -- 这个输入参数:用'Green'替换@lname exec proc_author_addr @lname = 'Green' 或 exec proc_author_addr 'Green‘ end
全局变量的集合
SQL Server提供的全局变量集分为如下两类: • 与每次处理或与每次同SQL Server的连接有关的全 局变量。 例如@@rowcount, @@spid, @@error等 • 与内部管理所要求的关于系统内部信息有关的全局 变量。 例如,@@max_connections, @@version, @@Servername等。
该SQL Server的名字
举例 select @@version declare @book_price money select @book_price = price from titles where title_id = 'BU1032' if @@rowcount = 0 print 'no such title_id' else begin print 'title_id exists with' select 'price of' = @book_price End
使用局部变量时通常发生的错误
在程序中,使用局部变量通常容易发生的错误是数 据类型不匹配。即使用DECLARE语句定义局部变量的 数据类型与赋值给局部变量的值的数据类型不匹配。 如果发生这种情况,SQL Server总是试图隐式转换为 局部变量的数据类型。
全局变量
• 全局变量是由 SQL Server提供的变量,由系统为 其提供取值
存储过程的返回状态
每个存储过程的执行,都将自动返回一个返回 状态,用于告知调用程序执行该存储过程的状况。 调用程序可根据返回状态作相应的处理。 语法 create proc procedure_name ( ...... ) as begin SQL_statements return [ integer ]
•语法 DECLARE @var_name data_type [, @var_name data_type]。。。 举例 declare @msg varchar(40) declare @myqty int, @myid char(4) declare @myname type_name /* type_name是用户定义数据类型*/
查看存储过程的一般信息,如创建日期等,使 用: sp_help procedure_name
• 重新命名存储过程 语法:sp_rename old_name , new_name 例:将已创建的存储过程reports_1改名为 reports_1b: exec sp_rename reports_1, report_lb
存储过程

存储过程(Stored Procedure)是为了完成特定的功能而汇集成一组的 SQL语句集,并为该组SQL语句命名、经编译后 存储在SQL Server的数 据库中。用户可以根据需要决定是 否在每次执行时让SQL Server进行 重新编译。用户可以指 定存储过程的名字和给出参数来执行它。 • 允许多个用户(有权)访问相同的代码。 • 提供一种集中且一致的实现数据完整性逻辑的方法。 • 存储过程用于实现: -- 频繁使用的查询 -- 业务规则 -- 被其他过程使用的公共例行程序,例如错误处理例行程序等
举例: 创建向调用程序返回值的存储过程: create proc proc_num_sales (@book_id char(6) = null, /* 输入参数 */ @tot_sales int output /* 输出参数 */ as begin /* 过程将返回对于给定书号的书的总销售量 */ select @tot_sales = sum(qty) from salesdetail where title_id = @book_id return end
• 注意: — 在一个赋值给局部变量的select语句中,可以使 用常数、从表中取值、或使用表达式给局部变量赋值 。 — 不能使用同一SELECT语句既给局部变量赋值,又 检索数据返回给客户。 — 一个赋值给局部变量的SELECT语句,不向用户显 示任何值。
对局部变量的限制
局部变量必须先用DECLARE定义,再用SELECT语句赋 值后才能使用。 局部变量只能使用在T-SQL语句中使用常量的地方。 局部变量不能使用在表名、列名、其它数据库对象 名、保留字使用的地方。 局部变量是标量,它们拥有一个确切的值。 赋值给局部变量的SELECT语句应该返回单个值。如 果赋值的SELECT语句没有返回值,则该局部变量的值 保持不变;如果赋值的SELECT语句返回多个值,则该 局部变量取最后一个返回的值。
end
其中:integer为一整数。如果不指定,系统将自动返回一 个整数值。系统使用0表示该过程执行成功;-1至–14 表 示该过程执行有错,-15至 -99为系统保留值。用户一般 使用大于0的整数,或小于 -100的负整数。
相关文档
最新文档