SQL Server 2017推出STRING_AGG 字串集合的串接函式,但限制是SQL2017的版本。上個月重新加入一個大型專案中,專案的版本要求是SQL 2016,Code Review時發現同事改用For Xml Path再Distinct的替代,T-SQL閱讀起來多了點複雜,捲手來救援T-SQL程式的可讀性。
[SQL Server][T-SQL]REVERSE函數輸入二進位資料時可能會失效
REVERSE是SQL字串函數的一種,可以傳回字串值的反轉順序結果,輸入值的型別可以是字串、數值還有二進位資料(Binary),最近發現反轉二進位時,偶而會失效,原因是定序(Collate),筆記問題和解決方式。
[SQL Server][T-SQL]新增資料表欄位(Default Value加上Not Null)之續集(SQL冰魔法)
延續上週新增資料表欄位Default Value + Not Null是否會給舊資料預設值的題目。上一篇確認Default Value + Not Null會給也必須要給舊資料預設值,但為何相同資料量測試環境飛快但正式環境跑1小時?這種飛快,感覺不太真實,資料分頁真的有修改到?還是只有改定義?
[SQL Server][T-SQL]新增資料表欄位(Default Value加上Not Null會不會自動將舊資料給預設值)
今晚的程式過版中,有一部分是大型資料表要加開10幾個欄位來跟上行動支付潮流,到家後接到客戶電話,DBA大人執行DDL Alter Table欄位新增語法(Add Column)時,執行了1小時(....)。印象中同事的語法沒有加With Values,應該只修改到定義,沒有改到原始的資料分頁,另外,測試環境類似的交易量跑起來也很快,呼~~~
卡住的時候就是該重新測試填補SQL知識了,這篇先確認SQL是否會將舊資料給預設值,下一篇來查效能問題。
[SQL Server][DMV]新的sys.dm_os_host_info主機資訊(SQL Server 2017)
- 1987
- 0
- SQL Server
以往我們想要知道SQL Server裝在哪一個版本的O/S,這個時候打個電話請教SP,厲害的SP就會很快找到,然後精準的回覆我們O/S和DB的Version、Edition,甚至還會補充硬體資源的配置;但如果SP很忙,又沒有rdp權限時,以前我們會串SQL查dmv解決(dm_os_windows_info),今年SQL Server 2017多了新的DMV:dm_os_host_info 能同時提供 Windows 和 Linux 作業系統資訊,快來試試。
[SQL Server]SELECT INTO ON FILEGROUP(SQL Server 2017)
- 1936
- 0
- SQLPerformance
- 2017-12-10
資料庫初始檔案規劃時,除了主要的檔案群組(PRIMARY),我們通常會和DBA大人商量新增一到兩個檔案群組放到更快存取速度的磁碟,當新增資料表時,我們就可以依據資料表受歡迎程度(熱度)來設定不同的選擇,但如果遇到資料表是以SELECT INTO產生出來的,以往就只能放在預設的檔案群組(通常是PRIMARY), 如果想讓SELECT INTO的資料表要放到其他檔案群組,只能改資料庫的預設檔案群組來解決。
[SQL Server][T-SQL]SQL語法夾帶全形空白導致語法錯誤
這週有個客戶的案子幾百隻程式上線,上線後的隔天早上,同事S回報了系統程式出現很基本的SQL語法錯誤,明明年輕的工程師都測試過,還是發生了。
為了要掩蓋自己對這次問題原因的了解不足(是相容性層級嗎?),趕緊掛上電話花幾分鐘簡單的測試,試試改相容性層級然後回報同事S,最後發現問題在於不同SQL版本對全形空白的解析有差異,這次和相容性層級無關,晚上看F1賽車不練跑,快來筆記這個全形空白問題。
[SQL Server][T-SQL]STRING_AGG資料集組成字串(SQL Server 2017)
SQL Server 2016推出了將字串分割成資料集(STRING_SPLIT)的功能,今年SQL Server 2017則推出了將資料集組成字串的串接功能(STRING_AGG),而且還支援簡單的分組和排序,今晚繼續吃第三顆語法糖(胖)。
[SQL Server][T-SQL]TRANSLATE字串取代功能強化(SQL Server 2017)
如果想替換字串中的值,我們習慣在SQL Server用上REPLACE()函式,但碰上要換多個字串pattern時,就要用巢狀結構使用REPLACE()函式,SQL程式寫起來就比較不好閱讀,Oracle很早就有TRANSLATE()函式可以簡化語法,現在SQL Server 2017也開始支援了TRANSLATE(),今晚我們繼續吃語法糖(TRANSLATE)。
[SQL Server][T-SQL]CONCAT_WS串接分隔字元強化(SQL Server 2017)
如果打算將SQL查詢結果串接成逗號分隔的csv檔案,用ETL工具、BCP、用管理工具在查詢結果按右鍵等都可以實現,但如果想單靠SQL語法,MySQL可以用concat-ws()函式,在SQL Server我們就得用上很長的語法串接(+號 or CONCAT),今晚是新加坡F1夜戰第10年,一邊看賽車一邊來吃SQL 2017新的語法糖。
[SQL Server][T-SQL]Sequence序號使用時的效能
下午協助同事抓SQL資料庫效能問題,暫時沒有頭緒,不過碰上了已經在記憶體中忘光的SQL 2012新功能(對不起老師): 順序物件(Sequence),來筆記,順便觀察快取設定對取號效能的影響。
[SQL Server][T-SQL]輸入全半形空白
來到周末前,客戶跑來同事的桌邊問了一個小問題,T-SQL要如何輸入全型空白(空格),為了工程師肉眼的可維護性,除了直接輸入這種' ',想找其他的解法,剛剛跑步時想到客戶的問題,想到幾種解法,快來筆記一下。
[SQL Server][T-SQL]將多筆資料列串接成單一欄位的複合字串
最近的工作中要幫使用者設定大量的系統參數,有陣子沒使用到資料列串接,一時之間失去了她的消息,這年頭忘記的比記得的多,重新拾回後快來點部落筆記,順便二探SQL Server 2016新功能: STRING_SPLIT:字串切割。
[SQL Server][T-SQL]找出有跨資料庫讀取資料表的預存程序、檢視及功能
有時預存程序、檢視表會跨資料庫讀取資料,客戶最近想盤點跨資料庫存取的程式清單,來筆記快速找出物件的T-SQL語法。
[Powershell]在Powershell中使用T-SQL或呼叫預存程序(Stored Procedure)
- 2908
- 0
- Power Shell
- 2016-11-12
大致的作法是利用.NET反射(Reflection)載入.NET System.Data組件,建立SqlClient實作,然後就是你我熟悉的SqlCommand。
[SQL Server][T-SQL]查詢數值欄位中有沒有小數位數的值
資料匯入資料庫準備驗證總數時發現有小數位,於是想要抓出有鬼的資料出列,解題答案可能有很多種,腦海中想到這個數學函數!
[SQL Server][T-SQL]累積總計Running Totals
這兩天協助客戶處理累積交易餘額的資料修補,因為要使用到累積總計(Running Totals),但客戶還在使用SQL Server 2008 R2,筆記SQL Server 2012前後兩個版本的作法。
[SQL Server]修改資料庫實體檔案名稱(physical name)
- 8533
- 0
- SQL Server
有時後資料庫會出現門當戶不對的狀況,這時候不用重新投胎(Restore DB),只要幾秒鐘就門當戶對了。
[SQL Server][T-SQL]Update From derived table問題
- 2504
- 0
- SQL Server
晚上幫同事Debug Update From問題,乍看之下與常見T-SQL Update From語法無異,透過Select From驗證,筆數也正確只有1筆,但 Update From 卻把整個資料表都更新了!!!為了紀念加班的2小時,再來加班30分鐘快速筆記。
[SQL Server][T-SQL] DROP IF Exists(SQL Server 2016新語法)
- 2318
- 0
- SQL Server
時常會在程式中建立資料表,建立前總是先判斷是否存在才進行刪除,此時會用sys.objects metadata查詢資料庫內的物件
或是OBJECT_ID函數是否能取出ID來判讀物件是否存在,現在SQL Server 2016有更簡單的做法。
DROP IF Exists
- 1