Posts

SQL Server Partition Table T-SQL 分割資料表實作步驟

1 新增空白資料庫 USE [master] GO CREATE DATABASE [PartitionTableLab] CONTAINMENT = NONE ON  PRIMARY ( NAME = N'PartitionTableLab', FILENAME = N'F:\SQL_DATA\PartitionTableLab.mdf'  , SIZE = 1024KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = N'PartitionTableLab_log', FILENAME =  N'F:\SQL_DATA\PartitionTableLab_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB ,  FILEGROWTH = 1024KB ) GO


2 以年度建立 Partition Function 與 Partition Schema USE [master] GO ALTER DATABASE [PartitionTableLab] ADD FILEGROUP [FG_2012]; ALTER DATABASE [PartitionTableLab] ADD FILEGROUP [FG_2013]; ALTER DATABASE [PartitionTableLab] ADD FILEGROUP [FG_2014]; GO ALTER DATABASE [PartitionTableLab] ADD FILE ( NAME = N'HIS_2012', FILENAME =  N'F:\SQL_DATA\PartitionTableLab_his_2012.ndf' , SIZE = 1024KB , FILEGROWTH = 1024KB ) TO FILEGROUP [FG_2012] GO ALTER DATABASE [PartitionTableLab] ADD FILE ( NAME = N'HIS_2013', FILENAME =  N'F:\SQL_DATA\PartitionTableLab_h…

T-SQL 透過 XOR / AND 運算式做複合式判斷 1, 2, 4, 8, 16 列舉值

若想用一個數值表示多個條件是否成立,這些複合條件設計一個列舉 , 每個條件對應一個 2 的幕次方,如:1, 2, 4, 8, 16...
舉例  1 號條件值 = 1: 0001 2 號條件值 = 2: 0010 3 號條件值 = 4: 0100 4 號條件值 = 8: 1000
有個變數 A 包含 1 號條件與 3 號條件 ,用 XOR 運算變數 A 等於 5 0001 0100 ------ 0101
比對 變數 A 是否有包含 3 號條件,用 AND 運算會得到 4,與 3 號條件的值相同,表示成立 0101 0100 ------ 0100
比對 變數 A 是否有包含 數值 2,用 AND 運算會得到 0,與 2 號條件的值不同,表示不成立 0101 0010 ------ 0000
以 T-SQL 實作範例
/*Enums */ DECLARE @Gold int = 1, @Silver int = 2, @Pearl int = 4, @Diamond int = 8; DECLARE @MyGift int;
/*Add some */ SET @MyGift =  @Gold | @Diamond;
/*Check if I have */ select 'I have Gold', IIF(@Gold & @MyGift = @Gold, 'Yes', 'No') union all select 'I have Silver', IIF(@Silver & @MyGift = @Silver, 'Yes', 'No') union all select 'I have Pearl', IIF(@Pearl & @MyGift = @Pearl, 'Yes', 'No') union all select 'I have Diamond', IIF(@Diamond & @MyGift = @Diamond, 'Yes', 'No')

在 Github 建立部落格 Step by Step

在 Github 建立部落格,好處有: 1) 網站主題範本無限 2) 使用 Markdown 語法寫文章, 3) 自訂網域名稱
How to create Jekyll blog using Github Pages - Tutorial 4
1) clone Github 範本  2) 切換預設的 branch 3) 等候很長的時間,網址會生效 4) 本機端編輯 Push 到 Github Server
Youtube : https://youtu.be/U0idtvxVo9I
範本集  https://pages.github.com/themes/ http://jekyllthemes.org/ https://hexo.io/themes/ https://www.jianshu.com/p/bcdbe7347c8d
單一網站 https://github.com/Huxpro/huxpro.github.io http://blackrockdigital.github.io/startbootstrap-clean-blog-jekyll/


自訂網域名稱
1) DNS 上新增 A record 2) DNS 新增 CName 3) Github 後台設定 Custom domain 4) 新增 CNAME 檔案 5) 修改 _config.yml 檔案

Article: https://xiwan.io/archive/github-pages-use-custom-domain-name.html

如何新增一篇文章
1) 在 _posts 目錄下新增副檔名為 .md 的檔案 2) 在標題前後一行加上 ---


練習成果 http://blog.robinks.net/

VSCode: 使用 Git 版本控制
1) 安裝 Visual Studio Code 2) 安裝 Git https://git-scm.com/downloads 3) Github 新增一個 Repository 4) 下載到本機 5) VSCode 開啟目錄,對檔案做新增修改,commit -> push

Channel9 Video https://channel9.msdn.com/Series/Mastering-Visual-Studio-Code/Using-Git-Versio…

Google 試算表透過表單編輯資料 Sheet connect Form

Image
Google Sheets 內可以建立一個輸入表單,做為問卷調查、報表名、測驗卷…等功能,
預設這是提供使用者新增一筆資料,當新增後離開表單畫面,要修改資料只能從指定儲存的 Google Sheets 中編輯。

而在 Awesome Table and Google Form 範例 中,資料列中點擊 [EDIT ENTRY] 可以開啟表單畫面做編輯。

筆者依樣畫葫蘆做一個簡單範例,先看一下執行的結果


範例說明 當 Google Sheet 接受從 Google Form傳入資料時,背景執行一段 Script 產生一個超連結在該列的第一個欄位上。

實作步驟 1. 建立 Google Sheets 並新增一個表單

在 Google Form 中設計輸入欄位


在 Google Form 右上角 Setting 中啟用送出後可編輯


從 Google Form 中新增一筆資料


在 Google 中第一欄 [Timestamp] 左側新增一欄,這欄內容將由 Script 中產生


2. 建立 Script 與 Trigger 進入 Script editor


複製 Google Apps Script,修改第一行網址中的 ID 與第二行的 Sheet 名稱 (sheetName)。

var formURL = 'https://docs.google.com/forms/d/1T7IDCVvO2Osb7SlqVgWzpQoFt4IkGd8s3FQS7AhKJI0/viewform/viewform'; var sheetName = 'Form Responses'; var columnIndex = 1 ; function getEditResponseUrls() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); var data = sheet.getDataRange().getValues(); var form = FormApp.openByUrl(formURL); for(var i = 1; i < data.length; i++) { if (data[i][1] != '&…

[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
再調整字形與大小。


調整後的效果如下圖