基於MS SQLServer的全表搜尋

2022-03-13 15:40:59 字數 1339 閱讀 9999

最近在做專案的時候遇到乙個問題,就是在查詢記錄的時候輸入關鍵字找出滿足條件的記錄。一開始是每乙個字段乙個關鍵字,後面感覺有的查詢的時候會涉及到6個甚至更多的字段,感覺在查詢的時候相當困難。網上找了很久,想找到一種能夠不需要指定欄位就可以全表搜尋的方法,可惜一直沒找到,最後找到乙個折中的辦法:在每乙個表中定義乙個字段,這個字段儲存其他所有欄位的和,然後查詢的時候就只要匹配這個字段就行了。

下面是實現思路:

因為在每條資料插入和修改的時候需要往這個欄位中插入值或者是更新這個字段,而如果靠**來控制的話會非常麻煩:你必須時時刻刻記得在**插入資料了,又在**修改了資料。最後想到了觸發器,直接在資料庫中建立乙個觸發器。

觸發器語句如下:

create trigger [gecoassets_trigger]

on [dbo].[gecoassets] for

insert,update

asupdate gecoassets set

sumtext=isnull(sourceid,'') +'∩'+isnull(sourcename,'')+'∩'+isnull(statenow,'')+'∩'+isnull(buydepartment,'')+'∩'+isnull(factory,'')

+'∩'+isnull(sourcetype,'')+'∩'+isnull(backinfo,'')

這樣原本以為已經大功告成了,最後測試的時候發現,只要插入一條資料,或者表中的某個欄位的值發生改變,所有的sumtext的值都會被重新更新或者插入,當資料量很大的時候或者資料更新插入很頻繁的時候,勢必給資料庫造成很大的壓力。

alter trigger [gecoassets_trigger]

on [dbo].[gecoassets] for 

insert,update

asupdate 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欄位的)搜尋了,感覺雖然不是什麼完美的解決方案,但是畢竟還是比較理想的實現了想要的效果。不知道各位有沒有更好的解決辦法,或者說有沒有第三方的元件來實現全表關鍵字搜尋或者更牛的多表聯合關鍵字搜尋呢?

如果有的話,各位不要吝嗇哦,小弟這廂有禮了...

MS SQL Server版本的選擇

這兩天尋思著將用了很久的sql server express edtion換一換,因為這畢竟是個免費版,很多功能,包括使用起來感覺不是很好,但是面對sql server的一大堆版本,我茫然了,不知道該怎麼選擇,真的感到很糾結,一般sql server有如下幾個版本,先來做個大概介紹.2,標準版 st...

基於全排列的N皇后暴力

n皇后是演算法的經典問題,以下提供一種基於全排列的n皇后的解法。首先,n皇后的起始要求是指的是 不能有任意兩個皇后是同行 同列 同乙個斜排。所以可以很自然的聯想到全排列來解決這個問題。例如,1 2 3的全排列有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1,3 1 2六種。它們可以看做是...

MS SqlServer和Oracle的幾個區別

1 比如 oracle 就不支援 top 關鍵字。得用內建變數 rownum 來判斷。另外,比如 select from table1 where rownum 3 order by id 這些的語句,oracle 是先取前兩條記錄然後才排序的。要想實現先排序再取前兩條記錄得這樣寫 select f...