分享
 
 
 

在后台实施SQL数据库管理的各种方法

王朝mssql·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

摘要:本文主要介绍如何在数据库后台利用存储过程,触发器来管理数据库的技术,并以Delphi做前台,SQL Server做后台的模式给出具体的实现代码。?

关键字:Stoueprocedure、Trigger、Delphi、SQL?

一、SQL交互式数据库查询语言?

交互式数据库查询语言SQL中有关表操作基本的SQL语句有如下四种:(下面分别出给四种语句的语法形式及其说明)?

(1)查询表命令?

SELECT[ALL|DISTINCT]select_list?

[INTO[new_table_name]]?

[FROM{table_name|view_name}?

[WHERE clause]?

[GROUP BY clause]?

[HAVING clause]?

[ORDER BY clause]?

[COMPUTE clause]?

其中:?

select_list指定列(ALL则为所有列,DISTINCT为不选相同记录?

new_table_name指定目标表名?

table_name|view_name指定源表名或源视图名?

WHERE clause给出选择条件?

GROUP BY clause按clause分组处理?

HAVING clause给出分组处理的条件?

ORDER BY clause按clause排序?

COMPUTE clause则产生新行?

(2)插入记录命令?

INSERT[INTO]?

{table_name|view_name}[(cohurnn_list)]?

{DEFAULT VALUES|values_list|select_statement}?

其中:?

table_name|view_name指定新表名或新视图名?

values_list|select_statement指定列或子查询?

(3)修改表令命?

UPDATE{table_name|view_name}?

SET[{table_name|view_name}?

{column_list|variable_list|variable_and_column_list}?

[WHERE clause]?

其中:?

table_name|view_name指定源表名或源视图名?

column_list|variable_list指出列或变量名?

WHERE clause给修改条件?

(4)删除命令?

DELETE[FROM]{table_name|view_name}?

[WHERE clause]?

其中:?

table_name|view_name指定源表名或源视图名?

WHERE clause给出修改条件?

这四种命令是数据库操作中最基本的,在各种数据库前端开发工具中均能得以支持。也是进行数据库应程序开发的常用SQL语句。其它的SQL语句并不是在各种开发平台中都支持,在此不再赘述。?

二、SQL Server中存储过程和触发器的使用?

存储过程是存储在服务器上的预先编译好的SQL 语句在使用时要考虑以下问题:?

1.存储过程在第一次编译时进行语法检查,编译好的存储过程保存在高速缓存中用于调用,这样执行的速度和效率较高。?

2.存储过程由应用程序激活,不由SQL Server自动执行。?

3.一个存储过程可以用于收集数据和修改数据,但是不能同时用于两者。?

存储过程的优点是:?

1.在执行重复任务时能提高效率;?

2.使前端的应用程序共享应用逻辑;?

3.可以永久创建,也可以临时创建;?

4.可以在SQL Server启动时自动执行。

存储过程的创建语句语法为:?

CREATE PROCedure[owner.]procedure_name[;number]?

[(parameter1[,parameter2]...[parameter255])]?

[{FOR REPLICATION}|{WITH RECOMPILE}?

[{[WITH]|{,}ENCRYPTION]]?

AS sql_statements?

其中:?

proceddure_name〓〓为过程名称?

;number〓〓用于在过程名称重复时进行编号?

[(parameter1[,parameter2]...[parameter255])]〓〓为参数序列?

WHTH RECOMPILE〓〓执行计划不保存的高速缓存中,每次执行过程需要重新编译?

ENCRYPTION〓〓加密syscomments表的内容,syscomments表中包含CREATE PROCedure的文本,保证无论何时都不删除syscomments表?

FOR REPLICATION〓〓过程在前台执行,不在服务器上执行?

下面的SQL语句在MYDATABASE数据库上创建存储过程my_store_pro1?

USE MYDATABASE?

以下须是一个独立的查询模块,因为CREATE PROCDURE语句须是查询模块的首行。

CREATE PROCDURE my_store_pro1?

@my_paral char,?

@my_para2 int?

AS?

SELECT*FROM my_table1?

WHERE my_table1.no1=@my_para1?

AND my_table.1no2

GO?

执行存储过my_store_pro1?

EXEC my_store_pro1'12',23?

触发器是一种特殊的存储过程,无论何时要对它所保护的表进行修改时它就自动执行。触发器由SQL Server自动执行,不能由应用程序调用,便于保护数据库的完整性和完全性。其语法结构为:?

CREATE TRIGGER [owner.]trigger_name?

ON[owner.]table_name?

FOR {INSERT,UPDATE,DELETE}?

[WITH ENCR YPTION]?

AS?

IF UPDATE(column_name)?

[{AND|OR}UPDATE(column_name)...]sql_statements?

其中:?

trigger_name〓〓指定触发器的名称?

table_name〓〓指定触发器所在的表名?

INSERT,UPDATE,DELETE〓〓指定触发条件?

ENCRYPTION〓〓加密syscomments表的内容,syscomments表中包含CREATEPROCedure的文本,保证无论何时都不删除syscomments表,sql_statementw是在表的内容有修改(UPDATE)时引起的动作以下是一个修改触发器,如果my_tabel的nolmy_table1字段有修改,给出错误提

示。?

CREATE TRIGGER test?

ON my_tablel?

FOR UPDATE?

AS?

IF UPDATE(nol)?

BEGIN?

PRINT(不能修改此列数据’)?

END?

以下插入触发器在TITLE_L有数据增加时,给末对NO_LOCAL赋值的记录赋值,其值是现有记录中NO_LOCAL的最大值加1(NO_LOCAL为字符串类型)?

CREATE TRIGGER add_no?

ON TITLE_L?

FOR INSERT?

AS?

DECLARE @tmpl int?

SELECT @tmpl=MAX(CONVERT(int,NO_LOCAL))FROM TITLB_L?

SELECT @tmpl=@tmpl+1?

DECLARE @tmpstr char(4)?

SELECT @tmpstr=CONVERRT(varchar(4),@tmpl)?

UPDATE TITLE_L?

SET NO_LOCAL=@tmpstr WHERE NO_LOCAL=NULL?

三、应用实例介绍?

以下给出的程序段功能为:在前台Delphi环境下调用存储过程,在服务器由表dbo.all选出符合用户身份的记录生成表dbo.today;由触发器删除部分不合日期要求的记录;再从前台用批量记录移动把dbo.today的内容下载的本地LOCALDATA数据库上data.dbf表。?

{在服务器的MYDATA数据库上创建存储过程my_store_prol:}?

CREATE PROCDURE my_store_prol?

@secu_id int?

AS?

SELECT*FROM all?

WHERE my_table1.no1

GO?

{在MYDATA数据库的表dbo.today上创建触发器:}

CREATE TRLGGER add_no?

ON today?

FOR INSERT

AS?

DELETE*FORM today?

WHERE riqi

GO?

{在前台程序中执行存储过程my_store_prol:}?

Databasel.AliasName:='MYDATA';?

Databasel.DatabaseName;='my_database';?

Database1.connected;=True;?

SourceTable1.DatabaseName;='my_database';?

SourceTable1.TableName='dbo.today';?

SourceTable1.Active;=True;?

StoredProc1.DatabaseName;='My_database';?

StoredProc1.StoredProcName:='my_proc';?

StoredProc1.Params.Clear;?

StoredProc1.Params.CreateParam(ftInteger,'secu_id',ptInput);?

StoredProc1.Prepare;?

StoredProc1.ExecProc;?

{在前台程序中下载dbo.today的内容到data.dbf表:}?

Database2.AliasName:='LOCALDATA';?

Database2.DatabaseName:='local_data';?

Database2.connectde:=True;?

DestinTable1.DatabaseName:='local_data';?

DestinTable1.TableName:='data.dbf;?

DestinTable1.Active:=True;?

BatchMovel.Mode:=batAppend;?

BatchMovel.RecordCount:=0?

BatchMovel.Source:=SourceTable1;?

BatchMovel.Destination:=DestinTable1;?

BatchMovel.Execute;?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有