The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何變更 SQL Server 的系統資料庫定序以避免暫存資料庫的定序衝突

我們上周公司啟動了一個新專案,我們工程師拿到客戶的資料庫之後,發現客戶提供的預存程序無法順利執行,發生了資料庫定序 (collation) 的衝突問題。我們負責的工程師由於是第一次遇到這個狀況,所以鬼打牆了一段時間,因為我上周都在備課,所以我跟他講:「你直接移除重裝 SQL Server 並明確指定定序會比較快,我現在沒時間跟你講太多技術細節。」今天這篇文章我打算來說說這個問題背後的技術細節。

... 繼續閱讀 ...

使用 Data API builder 快速實現安全的 CRUD 應用程式

微軟最近推出了一個開發工具叫 Data API builder (DAB),這是一套開源的資料處理引擎,他可以快速的將資料庫的資料轉換成 REST 與 GraphQL API 端點(Endpoint),方便我們快速的建立安全的 CRUD 應用程式。有了 Data API builder 之後,針對大多數 CRUD 類型的應用程式,幾乎都可以在幾分鐘之內完成 API 開發,只要使用一些前端框架就可以快速的建立一個完整的應用程式。

... 繼續閱讀 ...

如何使用 SqlBulkCopy 大量匯入資料到 SQL Server 資料表中

最近有個維護案需要定期匯入百萬筆記錄到 SQL Server 之中,客戶的原始廠商在後台是有寫了一個功能可以讓後台管理員上傳 Excel 檔案,然後透過程式一筆一筆新增到資料庫中,但這個匯入的過程竟然要花上 1.5 小時才能新增完畢,實在是太慢了。其實從 .NET Framework 2.0 開始,在 System.Data.SqlClient 命名空間下就有個 SqlBulkCopy 類別可以用來高效率的大量寫入資料到資料表中,其寫入速度可能快上 50 倍之多!

... 繼續閱讀 ...

如何解決 Azure SQL Elastic Pool 資料庫集區 Allocated space 已滿的問題

我公司有個 Azure SQL Elastic Pool 資料庫集區,我有 52 個資料庫,每個資料庫都蠻小的,最大的一個也才 5GB 左右,原本預設最大可用儲存空間為 50GB,但上周某一天開始就有個應用程式出現儲存空間使用量已滿等問題,讓我覺得十分詭異,查了一下資料庫用量也都還沒滿,還有許多剩餘空間才對,但就是有個資料庫要求更多空間,導致程式發生異常。今天我就來聊聊這個問題,以及我已經找到的解決方案!

... 繼續閱讀 ...

快速上手 SQL Server 的 JSON 操作能力

我們都知道 SQL Server 是一套強大的關連式資料庫系統,但從 SQL Server 2016 開始就加入了對 JSON 格式的支援,讓我們可以直接在 SQL Server 透過 T-SQL 就能處理 JSON 資料結構,讓我們有機會在關連式資料庫這種「結構化資料」中加入類似 NoSQL 這種「半結構化」的資料,增加了我們在架構設計與資料處理上的彈性,真的非常方便。這篇文章我就來帶大家快速上手,體驗一下如何在 SQL Server 操作 JSON 資料。

... 繼續閱讀 ...

如何修復 Microsoft SQL Server 毀損的 model 資料庫

在 Microsoft SQL Server 之中有好幾個重要的系統資料庫,其中有個 model 資料庫 主要用來作為 SQL Server 執行個體上建立之所有新資料庫的範本。因為 SQL Server 每次啟動時,都會重建 tempdb 資料庫,因此 model 資料庫一定要存在於 SQL Server 系統之中。然而我們前陣子有個客戶,因為 IDC 電源異常導致 model 資料庫毀損,進而讓 SQL Server 執行個體完全無法啟動,一卡就是 24 小時才打來求救。老實說這種狀況也不是經常會遇到,今天這篇文章我就來記錄一下重建 model 資料庫的過程。

... 繼續閱讀 ...

直接將 T-SQL 命令透過 STDIN 的方式傳入 SQL Server Linux 容器執行的方法

我先前寫過兩篇文章,一篇是 使用 Docker 執行 SQL Server on Linux 容器之常用工具與命令 分享各種常見的執行命令,另一篇則是 深入剖析 docker run 與 docker exec 的 -i 與 -t 技術細節 幫助我更加理解 Docker 處理 STDIN 與 Virtual Terminal (VT) 之間的關係。這讓我連結到一個長久以來希望被微軟實現的需求,如果我想直接透過 STDIN 將 T-SQL 傳入 SQL Server on Linux 容器執行,不想先把本機的 T-SQL 檔案複製進去,那該如何處理?想不到還真的給我研究出方法了!

... 繼續閱讀 ...