很多情境會使用CTE來跑遞迴,最常的情境應該就是用CTE跑出階層效果。
而要順利使用遞迴會有一些限制,其中官方文件有寫到一個限制就是 -->
- 遞迴成員資料行的資料類型必須與錨點成員中對應資料行的資料類型相同。
以下是因為該限制而發生錯誤的Demo Code
很多情境會使用CTE來跑遞迴,最常的情境應該就是用CTE跑出階層效果。
而要順利使用遞迴會有一些限制,其中官方文件有寫到一個限制就是 -->
以下是因為該限制而發生錯誤的Demo Code
今日一新系統上線,30分鐘後AP同仁傳了系統錯誤訊息給我,如下圖所示。從字面上來看就是系統的資料庫發生了DeadLock。我先開始錄SQL的Trace來抓DeadLock事件,但似乎只有系統開始運作的前30分鐘有發生,後來就沒再發生DeadLock事件。於是乎我就透過預設的Extented Event來檢視之前DeadLock事件是那些資源互咬,並檢視當下時間所執行的語法。但我怎麼看當時執行的語法都覺得不至於產生DeadLock啊。
某日有同仁表示自己撰寫的一張報表有時執行成功,但有時候又會失敗,然而他將該TSQL語法直接在SSMS執行時卻都不會失敗。
簡單筆記一下如何透過Linked Server來刪除資料表
本次參加PASS Taiwan Summit 2022時和朋友討論到多檔案的File Group是如何分散存放資料,其分散的最小單位為何呢?
今天一位同事用Case When去比對欄位時發生錯誤,該欄位是ntext型態,以下記錄一下
這是一個網友在PASS社團問的問題,個人筆記一下
日前在Tunning一句語法時,在SSMS的視窗下撰寫TSQL測試。當時發現我用變數當參數來查跟直接用數字來當參數查時會跑不同的執行計畫,Code的範例如下
今天在Super SQL Server社團看見有人問了一個問題,他有一個每日銷售金額統計表,他想每日都往前加5天,產生一個view叫做sumof5days,應該如何寫這個查詢呢?
日前在災難復原演練過程中,將msdb資料庫備份還原到另一台新建立的測試主機時發生
訊息 14650,層級 16,狀態 1,程序 msdb.dbo.sp_send_dbmail,行 73 [批次開始行 0]
在此資料庫中未啟用 Service Broker 訊息傳遞。請使用 ALTER DATABASE 陳述式來啟用 Service Broker 訊息傳遞。
日前將一個正式資料庫還原至測試機上,但因為測試機不需要實際資料,因此我就Truncate所有Table後再壓縮資料庫來減少測試機器的硬碟佔用空間。
日前有一個需求就是每一年初產出今年所有日期的資料,並寫入資料表中。產出今年所有日期的資料的作法我是採用CTE搭配其遞迴的特性來做
之前聽過老師在介紹SQL Server 2016時有提到利用Windows Server 2016及SQL Server 2016可以在無網域的狀況下建立WSFC(Windows Server Failover Clustering),因此也可以在不用網域的狀況下建立Availability Group了。
以往鏡像的範例大多是一對一建立,日前依好友的要求所以寫了這一篇二對一的架構,設定內容都一樣,只是要多設定一台而已,以下簡略寫一下步驟。
相信很多情境下會在資料表的欄位設計上用到所謂的計算欄位(Computed Column),顧名思義該欄位存放的值就是經過計算的一個結果。然而計算欄位的資料內容一般常會是取出資料後即時運算並顯示結果,但有時候也會因為某些需求希望能將運算結果真實寫入在page中,而這個需求只要在建立資料欄位時加入一個關鍵字Persisted即可。
日前檢視一支StoreProcedure時無意間發現了這一個問題。當時該SP的開發者在該SP中利用User丟進來的參數來串成他要的Query字串後再透過sp_executesql執行該語法字串。等於是在SP中組出一個Adhoc字串來跑,這樣完全無法享受到重用執行計畫的好處。
日前發現一個資料庫定序跟其他資料庫不同,為求一致性,我們可以單純用Alter Database去改資料庫的定序。但這樣的改法並不會修正該資料庫中其他資料表欄位原有的定序,只會影響未來新增的資料表。所以如果舊資料表欄位也要更改定序的話會需要Alter Table Alter Column 或 建立新資料表並重倒資料。
近期在撰寫TSQL做資料匯入時,會因為目的資料表有Identity型態的欄位,所以得在該資料表開啟IDENTITY_INSERT後再寫入資料。
今天同仁問了一個問題,他用字串動態組了一個超長的語法,但該字串列出來時發現中間少了一些語法,似乎是字串相加時被截掉了。
NULL在資料庫中一直以來常會被拿出來警世,也看過一些書籍或聽一些演講都會提到盡量不要讓欄位是可以允許NULL的。