[小菜一碟] Microsoft SQL Server 2017 所有支援的繁體中文定序清單

每每要在 Azure SQL Database 建立資料庫,設定定序這一關一定都會卡住,我必須用鍵盤輸入定序的完整名稱,可是完整的名稱有幾個人能記得住?而它那個尋找定序的功能又不太好用,再加上官方又沒有 SQL Server 所有支援的定序資訊,所幸我就來把跟繁體中文相關的定序放到部落格上,以後要查就有。

...繼續閱讀 »

[小菜一碟] 如何在 SQL Server Management Studio(SSMS)不撰寫 SQL 指令碼刪除所有資料表?

有時候我們在測試環境想刪除所有的資料表,但不想要重建資料庫,因為 SSMS 的物件總管無法多選資料表的關係,所以我都是用寫 SQL 指令碼的方式來做這一件事情,直到我無意中翻到了 StackOverflow 的這篇貼文才知道不用寫 SQL 指令碼也能做得到。

...繼續閱讀 »

[小菜一碟] 善用 SQL Server 唯一條件約束(UNIQUE Constraints)來避免因併發產生重複的唯一值

講到資料庫的唯一值,第一個我們會想到就是主索引鍵(Primary Key),那同一個資料表內除了主索引鍵之外會不會有其他的唯一值?我之前遇過的一個需求就有,它是一個部落格的功能,讀者可以收藏文章,同一篇文章不能重複收藏,而讀者可以對已收藏的文章進行任意的排序,所以「讀者 ID + 文章 ID」就成了資料表的主索引鍵,而「讀者 ID + 序號」就是資料表中的另一組唯一值。

...繼續閱讀 »

[廚餘回收] 在 SQL Server 中新增大量資料後又刪除的副作用

這天客戶跑來跟我說「資料庫壞了,無法新增資料!」,出現了下面這段錯誤訊息:

Could not allocate space for object 'dbo.XXX'.'PK_XXX' in database 'YYY' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

很明顯,這段訊息告訴我們是儲存空間已滿,可是我前幾天才維護過,按照資料增加的速度,不會那麼快才對,來問問看使用者做了什麼事?

...繼續閱讀 »

[廚餘回收] 嘗試解決 SQL Server 查詢處理器無法為平行查詢的執行啟動必要的執行緒資源(The query processor could not start the necessary thread resources for parallel query execution.)的問題

這陣子我們系統的錯誤通知出現了一個沒看過的訊息:

The query processor could not start the necessary thread resources for parallel query execution.

翻成中文是「查詢處理器無法為平行查詢的執行啟動必要的執行緒資源」,簡單來說就是「資料庫很忙,執行緒不夠用。」,而且根據幾個關鍵字 ThreadParallelQuery,我們也大概能知道是平行處理的問題,知道了方向就可以開始著手調查了。

...繼續閱讀 »

[食譜好菜] 在 SQL Server 中利用 Indexed View(索引檢視表)來加快複雜查詢的速度

我們或多或少應該都有遇過一種情況,就是某一些資料表 JOIN 起來的查詢較為緩慢,面對這類執行時間較長的查詢,我們第一步是先進行資料表本身的效能調校,調校之後如果查詢還是需要一點時間,又剛好我們的資料庫系統是使用 SQL Server 的話,那我們可以考慮為查詢建立 Indexed View 試試看。

...繼續閱讀 »

[食譜好菜] SQL Server 中「使用者(User)」與「角色(Role)」的授權關係。

上一篇文章大致地了解了 SQL Server 登入及使用者之間的關係,登入只是個開始而已,只是能進到 SQL Server 而已,這時候還不能存取任何資料庫物件,還需要得到授權,要在 SQL Server 授權存取資料庫物件,就不得不提到「使用者(User)」及「角色(Role)」。

...繼續閱讀 »

[食譜好菜] 既生登入,何生使用者?SQL Server「登入」及「使用者」的關係。

當我們建立了一個 SQL Server 實例之後,在開始處理資料之前,如果是對資安意識相對高一點的開發者,應該會有一個步驟是為我們的應用程式建立帳號,並且授予相對應的權限,而不會用 sa 走天下,當我們建立了一個登入時,通常會去使用者對應的頁面勾選對應的資料庫,此時,SQL Server 也會幫我們建立一個與登入名稱一樣的使用者,我們可能沒有感覺,但是 SQL Server 的登入及使用者其實是拆開來的。

...繼續閱讀 »

[小菜一碟] 利用 SQL Server 的 CTE(Common Table Expression)遞迴取得族譜中某人的所有子孫

樹狀的資料結構在日常的程式設計當中挺常見的,舉凡像是留言板人事組織族譜、…等,都用得上,但當我們把樹狀結構的資料存進 SQL Server 之後想要撈出來,除了用跑迴圈之外大概就是用遞迴了,迴圈的寫法就不多介紹,本篇文章要來跟大家分享遞迴的寫法。

...繼續閱讀 »

[小菜一碟] 適用 SQL Server 的三種單筆資料 INSERT or UPDATE(Upsert)的寫法

INSERT or UPDATE 或者有人稱 Upsert,是一個撰寫資料庫存取應用程式一定會遇到的場景,這個看起來簡單不過的寫入資料邏輯,到了實際真正要施作的時候,是有一些細節需要去注意的,下面我就我所知道的三種 INSERT or UPDATE 的寫法跟各位朋友分享。

...繼續閱讀 »