在 SQL Server 2017 出來以前,要做欄位資料合併顯示大都用 FOR XML,SQL Server 2017 加入了一個貼心的語法 STRING_AGG,大幅簡化了原本使用 FOR XML 的語法,我們來看 STRING_AGG 要怎麼使用?
[小菜一碟] SQL Server FOR XML 退休,欄位資料合併讓 STRING_AGG 來。
- 2285
- 0
- SQL Server
- 2018-12-09
在 SQL Server 2017 出來以前,要做欄位資料合併顯示大都用 FOR XML,SQL Server 2017 加入了一個貼心的語法 STRING_AGG,大幅簡化了原本使用 FOR XML 的語法,我們來看 STRING_AGG 要怎麼使用?
系統中的程序(Applicaion、SQL Agent Job、Stored Procedure、...)一多,尤其大部分中小企業的資料庫增刪改並沒有得到良好的管理,重複的操作一直在做,資料若是正確的那大家相安無事,如果資料發生錯誤的時候,開發人員就雞飛狗跳了,眾多程序重複增刪改相同的資料,讓追查錯誤來源變成一件苦差事,萬一錯誤的資料又跟錢有關,那更是壓力山大,還好科技始終來自於人性,利用 SQL Server 的 Trigger 加上 DMV(Dynamic Management Views)可以幫助我們找到線索。
FOR JSON 語法是從 SQL Server 2016 開始支援,跟 FOR XML 一樣,我們可以將整筆記錄或是部分欄位輸出成 JSON 格式,輕鬆解決類別與類別之間一對一及一對多關係的情形,再搭配 Dapper 自定義 TypeHandler,讓關聯式資料庫的欄位與類別的對應轉換無聲無息。
SQL Server 的 PIVOT
及 UNPIVOT
運算子用來將資料表中的欄轉置為列、列轉置為欄,將資料表中指定的欄位做旋轉,因為經常用到的時候就要再 Google 一次,所幸就自己寫一篇記錄一下,而且在轉置的過程中還順便彙總,一個常看到的範例就是計算銷售人員 1 ~ 12 月的銷售金額,並將 1 ~ 12 月當做欄位名稱 SELECT 出來,除此之外還可以拿來對付一些特別的設計。
面對被存放在 SQL Server 中的 Legacy Stored Procedures 這群洪水猛獸,遇到它們比遇到 Legacy C# Code 還讓人感覺無力,一方面是之前寫的人對 SQL 語句有自己的幻想,另一方面是要公司買維護工具給大家用比登天還難,今天在 Tune 一段 SQL 查詢語句時,讓我想起以前共事的 DBA 有表演過叫 SQL Server 分析查詢語句,然後提出改善建議的工具,就是它 - Database Engine Tuning Advisor。
發現一個工具 - SqlTableDependency,透過它可以在資料庫的資料發生 Insert、Update、Delete 的時候,即時主動發送通知,而且包含異動後的資料都一起隨著通知發送出來,我們就來看看它要怎麼用?
先前有介紹過用 SqlBulkCopy 快速批次 Insert 大量資料,心裡想說既然快速批次 Insert 大量資料有 SqlBulkCopy,那我要快速批次 Update 大量資料有沒有類似於 SqlBulkCopy 的東西可以用?很可惜,可能是我孤陋寡聞,遍尋不著可以像 SqlBulkCopy 這麼相對容易操作的工具,不過我倒是有找到替代方案,速度上也可以接受,我把整個實作的過程做個記錄,以利往後參考。
SqlBulkCopy 它不是個新玩意兒,但是我最近才認識它,「你不知道你還有哪些不知道」是一件很恐怖的事情,原來 SqlBulkCopy 在 .NET 2.0 就有了,它的出現讓 Insert 大量資料變得更方便了,我只能感嘆相見恨晚。
我在 2016/11/17 這天收到 Microsoft SQL Server Team 寄的一封信 Email,第一句話就說「The public preview of SQL Server on Linux has arrived!」,當天我就把 SQL Server 裝在 CentOS 7 上,但是我心中有個疑問「在 Linux 上的 SQL Server 會不會只是個玩具?」
TPC(Transaction Processing Performance Council)是一個組織,翻成中文就叫「交易處理效能委員會」,這個委員會的主要功能是定義一些交易處理及資料庫效能量測的標準,其中 TPC-C
標準是測量 OLTP 系統的 tpmC
(每分鐘可以處理的 Transaction 數量)來看看 OLTP 系統輸出的效能,而 HammerDB 就是一個提供 TPC-C 標準量測的 Open Source 工具。