發表文章

目前顯示的是有「SqlServer」標籤的文章

SQL Server -使用資料層應用程式匯出/匯入

圖片
前言 前陣子將自己寫的一個Side Project的資料庫放在網路上的 免費空間 ,這兩天想要把資料備份下來。網站有提供Export Data,但我試了沒用。使用.bak的方式備份,檔案會備份在免費空間的主機上,無法下載...昏。 解決方式 之前記得同事有提過,資料庫在SSMS使用 bacpac 進行備份/還原。試了一下果然可以,備份的檔案可以直接存在用戶端的電腦上。 匯出 1.匯出資料層應用程式 2.選擇本地位置 下一步確認後,會完整將Schema及資料匯出。 匯入 選擇匯出後的資料層應用程式 指定資料庫名稱及位置 確認後,資料庫匯入成功 參考連結 https://docs.microsoft.com/zh-tw/sql/relational-databases/data-tier-applications/import-a-bacpac-file-to-create-a-new-user-database?view=sql-server-ver15

SQL Server傳遞資料集到預存程序

今天同事提到他將資料集用參數的方式丟到預存程序裡面,大致的作法如下: 1.資料庫宣告資料表型別 CREATE TYPE dbo . USER_TABLE_TYPE  AS TABLE (        USER_NO VARCHAR ( 8 ) ) 2.C#宣告一個DataTable及參數    var table = new DataTable();             table.Columns.Add( new DataColumn( "USER_NO" , System.Type.GetType( "System.String" )));             table.Rows.Add(table.NewRow());             table.Rows[0][ "USER_NO" ] = "Abc" ;             var par = new SqlParameter             {                 ParameterName = "userTable" ,              ...

SQL Server-預存程序-動態分頁、排序、過濾

前言     目前寫的系統,部份查詢程式會呼叫預存程序,進行較複雜的運算來取得資料,但由於回傳的資料過大,導致雖然在程式端進行了分頁處理,RAM還是會因資料已載入而暴增。      而程式介面的功能設計上,使用者可以在查詢出來的列表,再進行排序、動態過濾、排序及分頁..等,這些功能若要在預存程序處理的話,就要將SQL改成組字串的方式。    這樣原本就已很複雜 的語法會變得更不好維護 , 在考慮先不修預存程序前提下,改用另一個預存程序動態組字串來呼叫本來的預存程序的寫法來達到相同的功能。 SQL 建立Table CREATE TABLE [dbo] . [DemoUser] (        [USER_NO] [varchar] ( 8 ) NOT NULL,        [USER_NAME] [varchar] ( 20 ) NULL )   塞資料 DECLARE @I AS INT DECLARE @MAX AS INT DECLARE @STR_I AS   VARCHAR ( 30 ) SET @I = 1 SET @MAX = 1000000 WHILE ( @I < @MAX ) BEGIN   SET @STR_I = CONVERT ( varchar ( 10 ), @I )   INSERT INTO   DemoUser values ( @STR_I , @STR_I + '@ email.com ' )   SET @I = @I + 1 END 預存-1 查詢資料 create Procedure [dbo] . [Proc_GetUsers] @USER_NO VARCHAR ( 20 ) AS   SELECT   * FROM DemoUser where USER_NO L...

關於Sql ~ 波浪字元

今天同事問EntityFramework在StartWith,Contain等方法所產生的SQL在結尾會有ESCAPE '~'  例: SELECT * FROM T WHERE Title LIKE 'foo%' ESCAPE '~' 查了相關文章後,只知ESCAPE是用來查詢資料內有含 萬用字元 ,例:  %_[]^ 等,但沒有關於" ~ "是要作什麼用的。 後來經測試,才知道" ~" 是代表所有的萬用字元, 意思為本來你可能要使用ESCAPE ' %_[^'  來查 有這些符號的 資料,而只要用 ESCAPE '~ ' 即可 SELECT * FROM T WHERE Title LIKE 'foo%' ESCAPE '%_[]^' 等同 SELECT * FROM T WHERE Title LIKE 'foo%' ESCAPE '~'

SQL Server持續整合

圖片
目前的CI 架構,還缺一個資料庫持續整合的功能,來自動更新資料庫結構,今日剛好瞄到一篇舊文後,趕快來補上。 新增SqlServer Project,匯入現有的資料庫結構 建立發行檔,選擇目的資料庫  

[Sql Server] 當 SQL Server 發生 Deadlock 時,自動發送 Email

圖片
同事分享一篇文章,關於資料庫發生DeadLock時,如何通知管理者。不過內容很簡略,摸了一陣子才搞起來。 Step by Step 1.啟用目標資料庫(本例使用AdventureWorks2014)與msdb的Service Broker。 執行語法前需先將SQL Server Agent 停用 ,等執行後再打開 2.建立DeadlockEvents資料表、排程及通知 此部份引用msdn範例

[Sql Server] 資料庫備份筆記

圖片
  今天與同事討論資料庫備份的一些特性後,與前兩天參考保哥的文章作一些整理。 完整備份 會備份 資料檔 .mdf 及 交易記錄檔 .ldf 作差異備份及交易記錄備份前,完整備份要先作 差異備份 只會備份 資料檔.mdf ,並與最近的一次完整備份作比對來備份有異動過的資料 不會備份 交易記錄檔 .ldf 交易記錄檔備份 只會備份交易記錄檔 .ldf 每次的完整或差異備份後,會 重新開始 交易記錄的起點 每次的備份會與上次的交易記錄作差異的交易記錄備份。 備份後的副檔名為.trn不是.bak