Posts

[T-SQL] 使用 Pivot 語法彙總卻不彙總

Image
在 SQL Server 中撰寫 T-SQL 應用 Pivot 語法,原本預期從左側的原始資料透過 Pivot 得到 (1) 的結果,
但偶而會遇到數值沒有合計,資料呈現為兩筆的狀況,如下圖 (2) 的狀況。
進一步了解,Pivot 語法中對於原始資料有三種概念1.  column being aggregated 要彙總的資料行,此案例為 Amount2.  column that contains the values that will become column headers 包含將變成資料行標頭之值的資料行,此案例為 Customer3. first pivoted column, second pivoted column… ,此案例為 A001, A002Pivot 計算過程會將上述之外的資料欄位進行群組,若有其他欄位值不相同者時則發生呈現多筆的狀況。
當發生類似的狀況可以檢查有否查詢多餘的欄位,從來源中移除欄位即可解決。範例 /*原始資料*/ DECLARE @OrderTable as Table(ID int, Customer varchar(8), OrderDate date, Amount int) insert @OrderTable(ID, Customer, OrderDate, Amount) select 1, 'A001', convert(date, '2018-10-01'), 100 union all select 1, 'A001', convert(date, '2018-10-01'), 110 union all select 2, 'A001', convert(date, '2018-10-01'), 120 union all select 2, 'A001', convert(date, '2018-10-01'), 130 union all select 3, 'A002', convert(date, '2018-10-01'), 200; select * from @OrderTable; /*發生錯誤的 Pivot 結果*/ se…

Warn for DELETE All records

在  SQL Server Management Studio (SSMS) 中執行刪除所有資料時,是不會有任何提醒的!!
例如將 delete * from XX 看成 select * from XX,或者未加篩選條件時,都可以輕易地直接刪除整個資料表的所有資料。
防範類似的悲劇發生,可行做法:

SQL Server 定期備份 當發生誤刪資料時,確保可以進行環原。
異動大量資料前,手動備份一次。

自製警告訊息 SSMS (v17.9) 目前沒有類似提醒的設定,不過可以在 delete trigger 加上類似的檢查,預防不小心刪除整個資料表,若真需要全部刪除前,再手動停用 Trigger,執行刪除後再手動啟Trigger。
建立刪除警告的 Trigger
FOR DELETE AS BEGIN DECLARE @Count int SET @Count = @@ROWCOUNT; IF @Count >= (SELECT SUM(row_count) FROM sys.dm_db_partition_stats WHERE OBJECT_ID = OBJECT_ID('dbo.MyTable_LOG') AND index_id = 1) BEGIN RAISERROR('Cannot delete all rows at once.',16,1) ROLLBACK TRANSACTION RETURN; END END
停用 Trigger 語法
DISABLE TRIGGER [dbo].[RPTIMG_LOG_delete_trigger] ON [dbo].[RPTIMG_LOG]
啟用 Trigger 語法
ENABLE TRIGGER [dbo].[RPTIMG_LOG_delete_trigger] ON [dbo].[RPTIMG_LOG]
所有資料表,建立預防刪除所有資料的 Trigger
/*-------------------------------------------------- description: …

SSMS change Object Explorer Font Size

Image
近日發現在筆電上使用 SQL Server Management Studio 中 Object Explorer 查找項目時,感覺字體太小越來越吃力。😅
若要調整其顯示字形與大小,目前沒有獨立的設定,只能透過修改全域環境字形達成。
從選單 Tools –> Options
開啟 Options 設定視窗,選擇 Environment –> Fonts and Colors –> Environment Font
再調整字形與大小。


調整後的效果如下圖

How to create Google APIs credentials

Image
建立新 Project進入 Google APIs & Services 後台,點此連結點擊 [Create]
輸入資訊後,點擊 [Create]
建立 Credentials選擇 [OAuth client ID]
Application type 選擇 Other 輸入 Name 點擊 [Create]
取得 Client ID 與 Client secret 後, 可以置入程式碼中呼叫 Google APIs。

如何將旅行照片顯示於地圖上

Image
旅行時使用手機拍照,若有開啟 GPS 定位功能,每張照片會儲存地理座標,可以透過以下步驟,將照片顯示在地圖上,做為另一種記錄旅途的方式。

步驟一: 新增「Google我的地圖」 從瀏覽器進入 Google 雲端硬碟,網址 https://drive.google.com/drive/u/1/my-drive


點擊「+ 新增」> 「更多」 > 「Google我的地圖」


步驟二: 匯入相片 進入我的地圖左上方,點擊「匯入」


從「相簿」中挑選要放入地圖的照片後,點擊下方「選取」


回到主畫面後,就可以發現每張照片已顯示在地圖上,且自動標上地名。


手機安裝 App「Google 我的地圖」,也可以檢視。


其他補充 Google 我的地圖,「匯入」照片這功能只有瀏覽器上有,手機 App 只提供編輯地點的功能。
要區分每一天或每一主題的行程,可以利用「圖層」功能,新增圖層後再匯入下一批照片,之後可以顯示影藏不同的圖層。

瀏覽線上示範請點擊 <連結>。
參考 My Maps- Adding locations, images and videos to Google Maps [ Youtube ]

Export data to CSV – (1) Database

Image
本文以 bcp 產生 csv 檔案工作流程的實作說明,當使用者要求匯出一份資料時,先將查詢語法組合為字串並建立新工作,透過 SQL Server Agent 排程執行輸出檔案。
bcp 基本語法bcp 指令是 SQL Server 可以做大量資料匯入與匯出,在 DOS Command 環境下中執行,先用幾個範例認識 bcp 指令的用法。(本文的範例是 Northwind 資料庫)資料來源指定一個資料表或檢視bcp dbo.Region out "E:\Region.csv" -S "(local)" -d Northwind -U sa -P mis123 –c


資料來源是一個 T-SQL 查詢語法bcp "select * from dbo.Region" queryout "E:\Region2.csv" -t "," -S "(local)" -d Northwind -U sa -P mis123 -c
資料來源是執行一個預存程序bcp "EXEC [dbo].[CustOrderHist] 'ALFKI'" queryout "E:\CustOrderHist.csv" -t "," -S "(local)" -d Northwind -U sa -P mis123 -c
加強 csv 在 Excel 的可讀性產生欄位標題以 bcp 產生的 csv 檔案是不包括欄位標題,找到解決方式是先產生一個欄位標題文字檔,再與 匯出的 csv 檔案合併為另一個檔案。COPY 指令範例COPY /V /Y /B E:\Temp\Header.txt + E:\Temp\DATA.temp E:\Temp\DATA.csv DEL E:\Temp\DATA.temp Header.txt 是欄位標題DATA.temp 是 bcp 產生的 csv 格式的檔案DATA.csv 是合併的新檔案名稱
當資料來源是預存程序時,SQL Server 2012 以後的版本可用 T-SQL 語法查詢得到欄位的標題SELECT name FROM sys.dm_exec_descri…

VS Code setup – JavaScript debugging

Image
全新安裝 Visual Studio Code ,建立一組 JavaScript 與 HTML 網頁,並在 Visual Studio Code 中直接啟動 Debug 模式。
首先到微軟網站下載並安裝 Install Visual Studio Code
進入 IDE 介面,左側是主要功能區,以下會用到這三項:
檢視目前開啟的目錄Debug下載 VS Code Extension

Install Extension 要模擬網站執行網頁與本機 Debug 需要安裝以下兩個 Extension ,可以直接從 IDE > Extension > 輸入 live server > Install (如下圖)。
或到網站下載安裝。


Live Serverhttps://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer
提供本機上的網站伺服器,支援動態編輯內容儲存後,網頁自動直接更新

Debugger for Chromehttps://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome
產品說明的很清楚: Debug your JavaScript code running in Google Chrome from VS Code.
安裝好兩個 Extension 後,關閉並重新開啟 VS Code

建立 Web 網站目錄與 launch.json 開啟一個全空的檔案目錄




index.html 中輸入
<h1></h1> <script src="./index.js"></script>

index.js 中輸入
window.onload = function () { var myword="hello world!"; document.querySelector('h1').innerHTML=myword; }
新增 launch.json
點擊左側 Debug > [No Configuration] 右側 > Add Configuration >…