今天在做一个投票模块的时候遇到了一个问题,数据库的层次分为:项目表(1)-->题目表(n),题目表(1)-->选项表(n)。在设计实际投票表的时候,用于记录实际选择的题目与选项就需要采用独立的数据表来进行记录,及一个选项做为一条记录(这样方便项目的后期数据统计),然后如果用程序来处理的话,就每次用户在投票的时候就可能面临上百次的sql语句的处理过程,这对于程序的处理和数据的传输都是一种考验(并不是一种优秀的处理方案),因此想到先在投票表里面用一个字段记录实际选择的题目与选项(采用字符串拼接的方式),插入到数据表的时候采用触发器进行数据分割,用触发器来对拼接的字符串进行切割并插入到记录实际选择的题目与选项的独立表格中。
实际应用的代码如下:
CREATE TRIGGER vote_data_insert_trigger ON vote_data FOR INSERT AS BEGIN declare @data varchar(50),@tmp_data varchar(50); declare @proId int,@dataId int; select @data=data,@proId=proId,@dataId=id from inserted set @tmp_data =@data; declare @index int; --获取,出现的首位置 set @index =charindex(',',@tmp_data); while @index>=0 begin declare @tmp_right varchar(20); --处理最后一个结果 if @index>0 begin set @tmp_right =Left(@tmp_data,@index-1); set @tmp_data = RIGHT(@tmp_data,len(@tmp_data)-@index); end else set @tmp_right=@tmp_data; declare @titleId int,@optionId int; set @titleId = left(@tmp_right,charindex('-',@tmp_right)-1); set @optionId=right(@tmp_right,len(@tmp_right)-charindex('-',@tmp_right)); insert into vote_data_detail values(@proId,@titleId,@optionId,@dataId); if @index=0 break; --获取,出现的首位置 set @index =charindex(',',@tmp_data); end END
插入投票表的sql类似如下进行处理:
insert into vote_data (proId,data) values (1,'1-1,1-2,1-4,1-3,2-1,2-2,2-3');
查看触发器是否存在,如果存在则进行删除的sql代码如下:
if exists(select name from sysobjects where name='vote_data_insert_trigger' AND type='TR') DROP TRIGGER vote_data_insert_trigger GO
查看触发器的sql代码如下:
exec sp_helptext vote_data_insert_trigger
知识点备注:
1、left()
left(<character_expression>,<integer_exception>)
返回character_exception左起integer_expression个字符
2、charindex()
返回字符串中某个指定的子串出现的开始位置。
charindex(<'substring_expression'>,<expression>)
其中substring_expression是所要查找的字符表达式,
expression可为字符串也可为列名表达式。如果没有发现子串,则返回0值。
此函数不能用于TEXT和IMAGE的数据类型
分享到:
相关推荐
触发器是基于特定的表创建,并与一个或多个数据修改操作(INSERT、UPDATE、DELETE)关联,当对这些操作执行时,SQL Server会自动执行预定义的SQL语句,以确保数据处理符合规定的规则。 SQL Server 2005提供了两种...
在 Sql Server 2000 中,可以使用以下语句来调整等待响应时间: ``` sp_configure 'show advanced options', 1 GO RECONFIGURE GO sp_configure 'query wait', 2147483647 GO RECONFIGURE GO ``` 二、在企业管理器...
这个压缩包"SQL试题、教材(大批量)"显然是一份丰富的学习资源,包含了多种关于SQL的学习材料,旨在帮助用户提升SQL技能,特别是对于SQL Server这一特定数据库系统的高级用法。 首先,PPT教材通常会涵盖SQL的基础...
对于大批量的数据删除,使用`TRUNCATE`命令可以更快地清空表,因为它不会触发行级的触发器,也不会记录回滚信息。 ##### 3.9 尽量多使用COMMIT 频繁的COMMIT可以减少数据库的锁等待时间,提高并发性能。 ##### ...
2. 使用临时表:在处理大批量数据时,使用临时表可以临时存放中间结果,避免产生大量的磁盘I/O操作。通过临时表,可以将复杂的逻辑分步处理,每个步骤处理的数据量减少了,系统性能得到提升。 3. 模拟多线程处理:...
1. **批处理优化**:会员版本可能提供更高效的批处理功能,允许用户设置更大的批量大小,快速处理大批量SQL语句。 2. **智能分析**:自动识别并处理复杂的SQL语句,如视图创建、触发器、存储过程等,提供更准确的...
在Oracle数据库中,进行大批量数据删除是一项需要注意性能和安全性的任务。常见的方法包括使用DELETE语句、FOR ALL语句,以及通过存储过程实现分批删除。以下将详细阐述这些方法及其优缺点。 首先,最基本的删除...
- **解释**:“3B”指的是大SQL语句、大事务处理以及大批量操作,这些都会显著降低数据库性能。 - **建议**:避免使用复杂的SQL语句,将大事务拆分为多个小事务,减少批量操作的数量。 #### 二、字段类军规 **1. ...
在MySQL数据库中,触发器是一种强大的工具,它允许在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的SQL语句。然而,触发器的误用可能导致不必要的性能消耗或者逻辑错误。因此,了解如何禁用和...
本文是关于海量数据快速批量处理的研究与实现的论文,重点研究了在数据库应用中如何快速大批量抽取和处理数据,并针对特定需求提出了基于共性特征的数据集进行交互式批量处理和批量加工的实现方法。 1. 海量数据的...
还在为数据要多字段大批量处理或指定满足过多条件,处理成特定数据而手工劳动烦恼吗? 还在为两表数据多字段相关联,要批量修改其一表多字段数据成另一表数据值,而不知怎样做而烦恼吗? 还在为查找数据库安全情况,...
开发者可能使用了SQL Server数据库,并编写了SQL语句来进行数据的插入、查询、更新和删除操作。此外,可能还涉及到存储过程、触发器等高级特性,以优化性能和实现复杂的业务逻辑。 3. 短信API集成:企业短信群发...
这种方式通常比使用INSERT语句快很多,适用于大批量数据导入。例如,`LOAD DATA INFILE 'data.txt' INTO TABLE my_table;` 4. **COPY命令(PostgreSQL)**: PostgreSQL的COPY命令允许从文件系统直接导入或导出...
通过使用SQL*Plus、SQL*Forms等工具,并调整CARRAYSIZE参数(默认为200),可以显著提高数据库操作的速度,尤其是在处理大批量数据插入或更新场景下。 #### 5. DECODE函数的应用 在复杂的逻辑判断场景中,DECODE...
用户可以通过SQL语句来操作数据库,例如INSERT插入新数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据,以及更复杂的JOIN操作用于合并多个表的信息。 3. **索引与性能优化**:为了提高查询速度,图书管理系统...
2. **存储过程和触发器的使用:** 在线环境中尽量少用存储过程和触发器,这些功能可能会增加系统的复杂度和维护难度。 3. **JOIN操作的优化:** - 采用适当的分解策略来保证高并发处理能力。 - 批量导入数据时...
执行SQL语句,如查询、插入、更新和删除,可以借助`MySqlCommand`对象和`MySqlDataReader`对象。确保在操作完成后关闭连接,以避免资源浪费。 接下来,我们关注Excel的数据交互。C#可以通过`Microsoft.Office....
1. **批处理操作**:PLSQL允许你一次性处理多个SQL语句,这对于大批量的数据操作非常有用,可以极大地提高效率。 2. **存储过程和函数**:存储过程是一组预编译的PLSQL语句,可以作为可重复使用的单元进行调用。...
- **问题及原因**:TempDB可能出现的问题包括空间不足、并发问题等,这些问题可能由不合理的配置、高并发操作或长时间运行的大批量事务引起。 #### 4. 索引的种类及其实际原理?如何有效地使用和维护索引? - **...
7. **SQL语句尽可能简单**:避免复杂的SQL语句,可以将其拆分为多个简单的语句执行。 8. **简单的事务**:例如上传图片等操作不应该加入到事务中,以免增加不必要的事务开销。 9. **OR改写为IN()**:`OR`的操作效率...