顯示具有 MS SQL 標籤的文章。 顯示所有文章
顯示具有 MS SQL 標籤的文章。 顯示所有文章

2018年4月21日 星期六

MSSQL CDC (Change Data Capture) 更新記錄

開發系統時,使用者常常會問可以知道資料是被那個員工更新的,更新什麼內容嗎?通常我都會回答系統會記錄Log時間,資料異動者都查詢的到,但是異動那一個欄位就沒辦法了,實在也不想為這個很少使用的功能再大費周張去寫程式作欄位比較再存到log去。

今天碰巧查個MSSQL的資料,才發現MSSQL 2008 就有類似的功能了,還不用寫程式作些設定就可以達到這個功能,以下就是這個CDC (Change Data Capture) 的簡單實測記錄。

-- CDC = Change Data Capture
-- 執行 CDC, sp_cdc_enable_table 為 enable, sp_cdc_disable_table 為 disable
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'items',
@role_name = NULL

GO
-- 觀察修改前、後差異
select * from cdc.dbo_items_CT

-- 目前 DB 中有那些 table 被 tracking 
SELECT [name], is_tracked_by_cdc FROM sys.tablesGO

-- CCD 設定多久會清除, 預設為 4320 分鐘或 3 天,  最大值為 52494800 (100 年)
select retention, threshold
from msdb.dbo.cdc_jobs
where database_id = db_id()
and job_type = N'cleanup'

2016年5月27日 星期五

取出字串的最後一個數字

取出字串中的第一數字比較容易,那字串有好多組數字,想要取回字串的最後一組字串怎麼處理呢?
請出Google大神,竟然沒有什麼參考資料,只好自己來。
以下為範例,重點在那個 REVERSE 函數哦!

DECLARE @productname varchar(100);
set  @productname = 'T20-5-2.12'

select
@productname,
cast(
reverse(
case PATINDEX('%[-,a-z,A-Z,~,@,#,$,%,&,*,(,),<,>]%',STUFF(REVERSE(@productname), 1,PATINDEX('%[0-9]%', REVERSE(@productname))-1,''))
when 0 then STUFF(REVERSE(@productname), 1,PATINDEX('%[0-9]%', REVERSE(@productname))-1,'')
else SUBSTRING(STUFF(REVERSE(@productname), 1,PATINDEX('%[0-9]%', REVERSE(@productname))-1,''),1,
     PATINDEX('%[-,a-z,A-Z,~,@,#,$,%,&,*,(,),<,>]%',STUFF(REVERSE(@productname), 1,PATINDEX('%[0-9]%', REVERSE(@productname))-1,''))-1)
end) as decimal(18,2))

2015年4月15日 星期三

MS-SQL Multiple-step OLE DB 錯誤

昨日在進行新系統上線測試,而這個測試是個報表相關程式。在一般的查詢條件之下,系統都可以正確無誤統計出資料,但是速度不快。但是下到某一個特定的字串查詢,怪事就發生了,系統出現附圖中的錯誤訊息:

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

天呀,這是什麼鬼東東,照例往估狗大神請教去,世界各地專家大都建議查查 SQL connection 連結字串,或查詢時欄位設定的問題,也有可能是 MDAC driver 的問題,我就照著那些建議試著去調校但仍不得其解,只好悶著頭自己測試,突然發現有一段的 SQL 查詢速度慢的不正常,像是 index 未使用到,心想試試也無妨就多加一個 index 作測試。Bingo,SQL 的執行速度立馬恢復正常,錯誤訊息也不見了。沒想到此錯誤訊息找一下午,只要加上 index 就可以打包收工。只能說上天保佑程式人。

Status: Case closed.

image

2013年5月22日 星期三

PHP + MS SQL 安裝問題

作戰計劃: PHP + MS SQL 由單機移至 Hyper-V

狀況出現: PHP 安裝完成, 但出現資料庫連結錯誤

接到任務後,騎兵就快手快腳下載 PHP 專用的 Appserv 開始安裝,過程相當簡單,依照執行步驟下一步下一步就完成了,請見下圖作為參考。

接著啟動 Apache 進行測試。哦,代誌發生了,出現錯誤訊息。看來是資料庫問題,騎兵我直接判讀為資料庫連結錯誤,這小角色應該容易解決。

錯誤訊息: Fatal error: Call to undefined function mssql_connect() in C:\AppServ\….

image

過了二天,小角色解決沒?喔…還沒哦,在 Google 大神裡看遍中外高手之祕方、旁門左道,仍不得其門而入。只能再檢查,看看有無蛛絲馬跡,網路上眾人的意見大部份都是 dll 檔案的問題,ntwdblib.dll 與 php_mssql.dll,試了再試,將 .dll 複製到 windows\system32 之下仍是無解,錯誤訊息仍有如惡鬼上身賴著不走。但就在此時騎兵我透過狙擊鏡上的十字標記瞄到 System32 目錄之下竟然有個 SysWOW64,哦~哦~哦~ 這台主機是 64 位元,那就將 ntwdblib.dll 與 php_mssql.dll 複製到此目錄下之看看,再重啟 Apache 服務,打開 PHP 網頁,馬上天空就傳來陣陣悠揚的聲音,噹  噹  噹  噹,下課收工。

image

 

* 作戰方針: windows 32 要 copy 到 C:\windows\system32, 但 64 bit 則要 copy 到 C:\windows\SysWOW64

* 最佳參考來源:
http://www.ptt.cc/bbs/PHP/M.1284709077.A.7C7.html 
http://www.appservnetwork.com/

下面截圖來自 PTT,是搜尋國內說明最詳細最清楚的,特別收錄,以玆鼓勵。image