Home Database Mysql Tutorial 基于MS SQLServer的全表搜索

基于MS SQLServer的全表搜索

Jun 07, 2016 pm 05:43 PM
sqlserver based on search

最近在做项目的时候遇到一个问题,就是在查找记录的时候输入关键字找出满足条件的记录。一开始是每一个字段一个关键字,后面感觉有的查找的时候会涉及到6个甚至更多的字段,感觉在查找的时候相当困难。网上找了很久,想找到一种能够不需要指定字段就可以全表

最近在做项目的时候遇到一个问题,就是在查找记录的时候输入关键字找出满足条件的记录。一开始是每一个字段一个关键字,服务器空间,后面感觉有的查找的时候会涉及到6个甚至更多的字段,感觉在查找的时候相当困难。网上找了很久,想找到一种能够不需要指定字段就可以全表搜索的方法,可惜一直没找到,最后找到一个折中的办法:在每一个表中定义一个字段,这个字段存储其他所有字段的和,然后查找的时候就只要匹配这个字段就行了。

下面是实现思路:

因为在每条数据插入和修改的时候需要往这个字段中插入值或者是更新这个字段,而如果靠代码来控制的话会非常麻烦:你必须时时刻刻记得在哪里插入数据了,又在哪里修改了数据。最后想到了触发器,直接在数据库中建立一个触发器。

触发器语句如下:

Create trigger [GECOAssets_Trigger]
on [dbo].[GECOAssets] for
insert,update
as
Update GECOAssets Set
SumText=isnull(SourceID,'') +'∩'+isnull(SourceName,'')+'∩'+isnull(StateNow,'')+'∩'+isnull(BuyDepartment,'')+'∩'+isnull(Factory,'')
+'∩'+isnull(SourceType,'')+'∩'+isnull(BackInfo,'')

这样原本以为已经大功告成了,最后测试的时候发现,只要插入一条数据,或者表中的某个字段的值发生改变,所有的SumText的值都会被重新更新或者插入,美国空间,当数据量很大的时候或者数据更新插入很频繁的时候,势必给数据库造成很大的压力。

这时我突然想起了当初学Orace的时候老师讲过的行级触发器,于是百度、谷歌找了很久,最后得出的结论是:MS SQLServer不支持行级触发器。这下让我很受打击啊,毕竟自己觉得还不错的方法就这样被终结了,心情极度郁闷。不过,不抛弃不放弃是我的座右铭,于是死磕继续百度、谷歌,最后发现,在插入和更新数据的时候,会有一个表叫做inserted,而这个表会存储你更新时候的数据,这样,我灵光一闪:那这个表中肯定就会存储这条记录的ID值,只要能取到ID的值,想必就可以指定更新某一条记录了,也就可以实现行级触发器的效果了,我抱着试试看的心态把触发器改成了如下:

Alter trigger [GECOAssets_Trigger]
on [dbo].[GECOAssets] for 
insert,update
as
Update GECOAssets Set
SumText=isnull(SourceID,'') +'∩'+isnull(SourceName,'')+'∩'+isnull(StateNow,'')+'∩'+isnull(BuyDepartment,'')+'∩'+isnull(Factory,'')
+'∩'+isnull(SourceType,'')+'∩'+isnull(BackInfo,'') where ID in (select ID from inserted) 

果不其然,完美地实现了行级触发器的效果,至此就可以全表不指定字段(当然还是需要指定SumText字段的)搜索了,感觉虽然不是什么完美的解决方案,香港空间,但是毕竟还是比较理想的实现了想要的效果。不知道各位有没有更好的解决办法,或者说有没有第三方的组件来实现全表关键字搜索或者更牛的多表联合关键字搜索呢?

如果有的话,各位不要吝啬哦,小弟这厢有礼了...

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to import mdf file into sqlserver How to import mdf file into sqlserver Apr 08, 2024 am 11:41 AM

The import steps are as follows: Copy the MDF file to SQL Server's data directory (usually C:\Program Files\Microsoft SQL Server\MSSQL\DATA). In SQL Server Management Studio (SSMS), open the database and select Attach. Click the Add button and select the MDF file. Confirm the database name and click the OK button.

How to solve the problem that the object named already exists in the sqlserver database How to solve the problem that the object named already exists in the sqlserver database Apr 05, 2024 pm 09:42 PM

For objects with the same name that already exist in the SQL Server database, the following steps need to be taken: Confirm the object type (table, view, stored procedure). IF NOT EXISTS can be used to skip creation if the object is empty. If the object has data, use a different name or modify the structure. Use DROP to delete existing objects (use caution, backup recommended). Check for schema changes to make sure there are no references to deleted or renamed objects.

What to do if the sqlserver service cannot be started What to do if the sqlserver service cannot be started Apr 05, 2024 pm 10:00 PM

When the SQL Server service fails to start, here are some steps to resolve: Check the error log to determine the root cause. Make sure the service account has permission to start the service. Check whether dependency services are running. Disable antivirus software. Repair SQL Server installation. If the repair does not work, reinstall SQL Server.

How to check sqlserver port number How to check sqlserver port number Apr 05, 2024 pm 09:57 PM

To view the SQL Server port number: Open SSMS and connect to the server. Find the server name in Object Explorer, right-click it and select Properties. In the Connection tab, view the TCP Port field.

How to recover accidentally deleted database in sqlserver How to recover accidentally deleted database in sqlserver Apr 05, 2024 pm 10:39 PM

If you accidentally delete a SQL Server database, you can take the following steps to recover: stop database activity; back up log files; check database logs; recovery options: restore from backup; restore from transaction log; use DBCC CHECKDB; use third-party tools. Please back up your database regularly and enable transaction logging to prevent data loss.

Where is the sqlserver database? Where is the sqlserver database? Apr 05, 2024 pm 08:21 PM

SQL Server database files are usually stored in the following default location: Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data The database file location can be customized by modifying the database file path setting.

How to delete sqlserver if the installation fails? How to delete sqlserver if the installation fails? Apr 05, 2024 pm 11:27 PM

If the SQL Server installation fails, you can clean it up by following these steps: Uninstall SQL Server Delete registry keys Delete files and folders Restart the computer

How to change sqlserver English installation to Chinese How to change sqlserver English installation to Chinese Apr 05, 2024 pm 10:21 PM

SQL Server English installation can be changed to Chinese by following the following steps: download the corresponding language pack; stop the SQL Server service; install the language pack; change the instance language; change the user interface language; restart the application.

See all articles