前天有朋友的一個(gè).net的網(wǎng)站出現(xiàn)問題了,是關(guān)于sql server 數(shù)據(jù)庫存儲導(dǎo)致的問題,具體問題是一旦這個(gè)詳情頁涉及到200個(gè)用戶以上就會出現(xiàn)報(bào)錯(cuò),200個(gè)以下就沒有問題,以下是sql server 數(shù)據(jù)庫修復(fù)過程。
今天抽空檢查了代碼,發(fā)現(xiàn)代碼里使用的是存儲過程只需動(dòng)態(tài)SQL。把.net代碼里執(zhí)行的sql語句手動(dòng)逐一執(zhí)行,發(fā)現(xiàn)代碼是根據(jù)m_id查出一個(gè)由200多個(gè)userid拼接成的字符串,然后傳到存儲過程的參數(shù)里。用id in(@userids)查詢數(shù)據(jù),測試了一下當(dāng)userids是幾個(gè)時(shí)是可以執(zhí)行成功的,但是當(dāng)超過200個(gè)時(shí)就會報(bào)錯(cuò)。查看了存儲過程的定義發(fā)現(xiàn) where 定義最多是1000個(gè)字符,而200個(gè)id的字符串就會超過1000個(gè)字符,從而會被截?cái)?,從而?dǎo)致sql語句執(zhí)行出錯(cuò)。
我點(diǎn)擊存儲過程->修改
修改為4000個(gè)字符后,點(diǎn)擊,就可生效
其實(shí)這種存儲過程在設(shè)計(jì)時(shí)候就有問題,不應(yīng)該使用id拼接的方式來構(gòu)建查詢語句,應(yīng)該使用聯(lián)合查詢或者子查詢來完成。
執(zhí)行存儲過程的方法是
exec dbo.proc_Pager "V_test','U_ID',1,20,'','CreateTime desc',' U_ID in (508,1185)';
至此,sql server 數(shù)據(jù)庫存儲導(dǎo)致的報(bào)錯(cuò)問題已修復(fù),希望出現(xiàn)類似故障的朋友可以參考一下。
由于我是個(gè)對磁盤空間過敏的人,每當(dāng)磁盤空間少到幾百兆,就會想辦法刪掉不用的軟件,時(shí)...
如果你的筆記本電腦遇到了黑屏花屏的現(xiàn)象你會怎么處理?會送修,我想JS會趁機(jī)撈一筆,其...
誤操作導(dǎo)致高級格式化分區(qū)后的數(shù)據(jù)恢復(fù)在DOS 時(shí)代有一個(gè)非常不錯(cuò)工具稱為UnFormat,它可...
寫博客時(shí)突然斷網(wǎng)數(shù)據(jù)丟失怎么辦-在線寫博偶爾會遇到這樣的問題:花了好長時(shí)間碼了好多字...
當(dāng)世界上規(guī)模最大的磁盤制造商上周聯(lián)合發(fā)布磁盤加密的單項(xiàng)標(biāo)準(zhǔn)后,迅速在用戶中間產(chǎn)生了...
和許多新技術(shù)一樣,有許多富有挑戰(zhàn)性的問題有待解決。對于S A N而言,兩個(gè)主要的弊端會...
主機(jī)總線適配器(HBA) 即使價(jià)值2,000美元的HBA也會對大型數(shù)據(jù)庫的性能造成重大影響。對...