sqlserver演算法
With T
As
(
Select * From TB Where newNo=103
Union All
Select TB.* From TB Inner Join T on TB.newNo=T.oldNo
)
Select * From T
2. 在sqlserver資料庫中如何將unicode編碼的字元轉換為中文求高手,求演算法
1、先把資料庫數據倒出來(導成.txt格式的),用軟體轉成unicode格式。
2、把資料庫轉成unicode格式。
3、把數據倒回。
說明:為了安全起見,在操作過程中一定要注意備份操作。
3. 怎麼在SQLServer中使用MD5加密技術 請大家幫幫忙!
在System.Security.Cryptography下有個MD5類可以實現加密演算法,具體用法上msdn上查一下
至於用它來加密密碼,我的思路是:用戶注冊時將密碼進行MD5加密後存入資料庫,用戶登錄時先將用戶提供的密碼用MD5加密,再與資料庫中的對照。由於MD5加密是不可逆的,用戶注冊後只能更改密碼,不能找回密碼
4. SqlServer是如何管理,分配存儲空間的呢
Sql Server 區管理(GAM,SGAM)
大家都知道Sql Server 中數據文件存儲的最小單位是頁面(Page),但實際SQLSERVE並不是以頁面為單位給數據分配空間的,Sql Server默認的存儲分配單位是盤區(Extend)。這樣做的主要原因是為了避免頻繁的讀寫IO,提升性能。在表或其它對象分配存儲空間,不是直接分配一個8K的頁面,而是以一個盤區(Extend)為存儲分配單位,一個盤區為8個頁面(Size = 8*8K=64K)。
這樣,對區得操作就會非常頻繁,也要求Sql Server有自己的一套系統管理著數量眾多的區。其中最突出的出一個問題,那就是在存儲那些只有少量數據,不足8K的對象,如果也是分配給一個盤區,就會存在存儲空間上的浪費,降低了空間分配效率。
為解決上述問題,SQLSERVER提供了一種解決方案,定義了兩種盤區類型,統一盤區和混合盤區。
全局分配映射表 (GAM):統一盤區,GAM 頁記錄已分配的區。每個 GAM 包含 64,000 個區,相當於近 4 GB 的數據。GAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區可用;如果位為 0,則區已分配。
共享全局分配映射表 (SGAM):由多個對象共同擁有該盤區,SGAM 頁記錄當前用作混合區且至少有一個未使用的頁的區。每個 SGAM 包含 64,000 個區,相當於近 4 GB 的數據。SGAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區正用作混合區且有可用頁。如果位為 0,則區未用作混合區,或者雖然用作混合區但其所有頁均在使用中。
在實際為對象分配存儲盤區時,為了提高空間利用率,默認的情況下,如果一個對象一開始大小小於8個頁面,就盡量放在混合盤區中,如果該對象大小增加到8個頁面後,SQLSERVER會為這個對象重新分配一個統一盤區。
據區當前的使用情況,GAM 和 SGAM 中每個區具有以下位模式:
第0個bit為保留位元組,始終為0
第1個bit表示該頁面是否已分配,我們知道GAM頁用來管理區是否已分配,但一個區包含8個頁面,所以用該bit用來准確定位該區的某個頁面是否已分配出去了。
第2個bit表示該頁面是否混合分區的一個頁面。
第3個bit表示該頁面是否是一個IAM(索引分配映射)頁面。
第4個bit表示該頁面中是否包含幻影或已刪除記錄,這有助於SQL Server定期清理幻影或已刪除記錄。
第5~7個頁面表示該頁面的空間使用率情況。
5. Sqlserver資料庫存放在伺服器上.表中行數很多.查詢演算法復雜.最終結果數據量很小.delp
總體的方向就是優化,包括索引,查詢程序,以及資料庫的結構,這個要看具體情況了,關鍵找到慢的原因估計是有些大的表做了表遍歷,仔細分析一下你的sql,每月十幾萬不算太大應該能解決。
6. sqlserver的字元串排序演算法是根據ASCII碼
排序規則是可以改的,select SERVERPROPERTY('Collation') 就能看到現在的
沒有根據ASCII碼排序的
7. sqlserver全文索引的原理
建立全文索引中有兩項非常重要,一個是如何對文本進行分詞,一是建立索引的數據結構。分詞的方法基本上是二元分詞法、最大匹配法和統計方法。索引的數據結構基本上採用倒排索引的結構。
分詞的好壞關繫到查詢的准確程度和生成的索引的大小。在中文分詞發展中,早期經常使用分詞方式是二元分詞法,該方法的基本原理是將包含中文的句子進行二元分割,不考慮單詞含義,只對二元單詞進行索引。因此該方法所分出的單詞數量較多,從而產生的索引數量巨大,查詢中會將無用的數據檢索出來,好處是演算法簡單不會漏掉檢索的數據。之後又發展出最大匹配分詞方法,該方法又分為正向最大分詞和逆向最大分詞。其原理和查字典類似,對常用單詞生成一個詞典,分析句子的過程中最大的匹配字典中的單詞,從而將句子拆分為有意義的單詞鏈。最大匹配法中正向分詞方法對偏正式詞語的分辨容易產生錯誤,比如「首飾和服裝」會將「和服」作為單詞分出。達夢資料庫採用的是改進的逆向最大分詞方法,該分詞方法較正向正確率有所提高。最為復雜的是通過統計方式進行分詞的方法。該方法採用隱式馬爾科夫鏈,也就是後一個單詞出現的概率依靠於前一個單詞出現的概率,最後統計所有單詞出現的概率的最大為分詞的依據。這個方法對新名詞和地名的識別要遠遠高於最大匹配法,准確度隨著取樣文本的數量的增大而提高。
二元分詞方法和統計方法是不依賴於詞典的,而最大匹配法分詞方法是依賴於詞典的,詞典的內容決定分詞結構的好壞。
全文檢索的索引被稱為倒排索引,之所以成為倒排索引,是因為將每一個單詞作為索引項,根據該索引項查找包含該單詞的文本。因此,索引都是單詞和唯一記錄文本的標示是一對多的關系。將索引單詞排序,根據排序後的單詞定位包含該單詞的文本。
步驟1)讀取一整條句子到變數str中,轉到步驟2
步驟2)從句子的尾端讀取1個字到變數word中,轉到步驟3
步驟3)在字典查找word中保存的單詞。如果存在則保存word,轉到步驟4,否則轉到步驟5)
步驟4)如果是字典中最大單詞或者超過最大單詞數(認定為新詞),從句尾去掉該單詞,返回步驟2
步驟5)讀取前一個字到word中,構成新單詞,轉到步驟3)
詞庫的內存數據結構和詞庫中單詞的匹配演算法
內存中單詞採用層次結構保存
假設字典中有如下的單詞:中國 中華民國 國家 人民 民主
在內存中按照如下方式按層排列,其中每一個方塊代表一個字,箭頭所指向為該單詞的前一個字
8. SQL的幾種分頁演算法
利用SQL語句分頁要看你用的什麼資料庫。
Oracle資料庫可以使用ROWNUM或row_number(),例如:Select * from (select ROWNUM rn, t.* from table t) where rn between 11 and 20;
Select * from (select row_number() over (ORDER BY col1) rn, t.* from table t) where rn between 11 and 20;
SQLServer資料庫可以用Top或者row_number()函數,道理同上。
利用SQL分頁有局限性,就是針對不同的資料庫有不同的寫法,所以通常會在應用程序裡面做分頁通用性比較強。但是對於數據量非常龐大的應用來說,還是用SQL分頁比較適合。
9. SQL 的一個累加演算法
select t2.id,t2.a,sum(t1.a)
from t_a t1 left join t_a t2 on t1.id<=t2.id
group by t2.id,t2.a
是這個意思嗎?
表名我起的叫t_a,應該和你一樣,欄位名也引用你的,直接運行看看結果
-----------補充----------
這個就可以顯示你要求的結果啊,你是要更新b列的數據嗎?你資料庫是什麼?
更新b列用這個
update t_a set t_a.b=s.sum_value from t_a
inner join (select t2.id,t2.a,sum(t1.a) sum_value from t_a t1 left join t_a t2 on t1.id<=t2.id
group by t2.id,t2.a) s on t_a.id=s.id and t_a.a=s.a
sqlserver下的寫法,其他資料庫寫法可能略有出入,有問題幫你調
10. SQLserver id直接的演算法
---演算法:記錄個位數2的數據之間的間距createbyyouhaoxinqin2014-7-810:50updatebyyouhaoxinqin2014-7-813:44
createtabledemo(
SSCIDintidentity(1,1),
SSCISSUEnvarchar(200),
SSCNOint
)
--初始數據
insertintodemo(SSCISSUE,SSCNO)values('270070401-001',36642)
insertintodemo(SSCISSUE,SSCNO)values('270070401-002',12738)
insertintodemo(SSCISSUE,SSCNO)values('270070401-003',93873)
insertintodemo(SSCISSUE,SSCNO)values('270070401-004',32579)
insertintodemo(SSCISSUE,SSCNO)values('270070401-005',93914)
insertintodemo(SSCISSUE,SSCNO)values('270070401-006',82309)
insertintodemo(SSCISSUE,SSCNO)values('270070401-007',58517)
insertintodemo(SSCISSUE,SSCNO)values('270070401-008',98172)
insertintodemo(SSCISSUE,SSCNO)values('270070401-009',90320)
insertintodemo(SSCISSUE,SSCNO)values('270070401-010',35304)
insertintodemo(SSCISSUE,SSCNO)values('270070401-011',96748)
insertintodemo(SSCISSUE,SSCNO)values('270070401-012',30941)
insertintodemo(SSCISSUE,SSCNO)values('270070401-013',36642)
insertintodemo(SSCISSUE,SSCNO)values('270070401-014',12738)
insertintodemo(SSCISSUE,SSCNO)values('270070401-015',93872)
insertintodemo(SSCISSUE,SSCNO)values('270070401-017',32579)
insertintodemo(SSCISSUE,SSCNO)values('270070401-018',93912)
insertintodemo(SSCISSUE,SSCNO)values('270070401-019',82302)
insertintodemo(SSCISSUE,SSCNO)values('270070401-020',58522)
insertintodemo(SSCISSUE,SSCNO)values('270070401-021',98172)
insertintodemo(SSCISSUE,SSCNO)values('270070401-022',90320)
insertintodemo(SSCISSUE,SSCNO)values('270070401-023',35304)
insertintodemo(SSCISSUE,SSCNO)values('270070401-024',96748)
insertintodemo(SSCISSUE,SSCNO)values('270070401-025',30922)
--檢索數據
select*fromdemowhereSSCNOlike'%2'
--創建全局臨時表
createtable##remmber_id_no(
remmberkeyintidentity(1,1),
idint,
noint
)
--創建全局臨時表
createtable##remmber_id_no2(
remmberkeyintidentity(1,1),
idint,
noint
)
--創建偏移數據
insertinto##remmber_id_no2(id,no)values(0,0)
--將演算法數據存入兩個全局臨時表
declaredemo_cursorcursorforselectsscid,sscnofromdemo
go
opendemo_cursor
declare@idint
declare@noint
declare@countint
set@count=0
fetchnextfromdemo_cursorinto@id,@no
while@@FETCH_STATUS=0
begin
select@count=COUNT(*)fromdemowhereSSCID=@idandSSCNOlike'%2'
if(@count>0)
begin
insertinto##remmber_id_no(id,no)values(@id,@no)
insertinto##remmber_id_no2(id,no)values(@id,@no)
end
fetchnextfromdemo_cursorinto@id,@no
end
closedemo_cursor
deallocatedemo_cursor
--得出id距離
select(t.id-t2.id)asID距離from
(select*from##remmber_id_nowhereremmberkeynotin(selecttop1remmberkeyfrom##remmber_id_no))ast,
(select*from##remmber_id_no2whereremmberkeynotin(selecttop1remmberkeyfrom##remmber_id_no2))ast2
wheret.remmberkey=t2.remmberkey
droptable##remmber_id_no
droptable##remmber_id_no2