iT邦幫忙

0

[SQL預存程序] - 透過 VS 2017 SQL Project 管理與設計 SQL

閱讀前須準備事項


本文章將會使以下工具以做為相關的介紹,請先準備好...

  1. Visual Studio 2017
  2. Microsoft SQL Server Developer 2017
  3. Microsoft SQL Server Management Studio 簡稱 SSMS
  4. Git Or Visual Studio Online

本文章適合對象:初/中階工程師


當您在撰寫 SQL 語法通常都是在 SSMS 直接撰寫語法與測試,就另外再存成檔案來做一些管理與應用,但這樣子你就沒有辦法達到一些較快速的應用。例如我管理 [SQL預存程序] 都是如以下方式。
https://ithelp.ithome.com.tw/upload/images/20190207/20104851zRjktk8f6g.jpg

透過 Visual Studio 來做管理,您可以將一些常用的 TSQL 語法可以先做分門別類的管理,更可以將常用語法與己經撰寫過的語法,透過搜尋來快速找到相關的「範例與制定撰寫標準」,例如 「文易處理、多筆資料迴圈處理、函式、特定記錄」等語法,再透過 Visual Studio Online、Git 與團隊成員「一同作業、了解、學習、經驗傳遞」。

例如我習慣會在宣告預存程序前先有以下的資訊


IF OBJECT_ID('dbo.API應用-簡訊-傳送簡訊') IS NOT NULL
    DROP PROCEDURE [dbo].[API應用-簡訊-傳送簡訊]
GO

CREATE PROCEDURE [dbo].[API應用-簡訊-傳送簡訊]
(
	@_InBox_JSON_Source					nvarchar(Max)		--資料來源
)
AS

-- 相關注解說明請寫在這裡,以免從 Visual Studio 轉至 SQL 說明內容沒有一起上去
-- ==========================================================================
-- 用		途:API應用-簡訊-傳送簡訊
-- 製   作  人:
-- 年   月  日:
-- 說		明:
		
-- 1. 專業人員沒有寫註解不叫專業
-- 2. 請儘可能 FROM 後面加 WITH(NOLOCK) 不要鎖定表格
-- 3. 轉 JSON 格式 FOR JSON PATH, (輸出 Null)INCLUDE_NULL_VALUES, (排除 [] 格式)WITHOUT_ARRAY_WRAPPER
-- 4. 欄位不分大小寫 COLLATE Chinese_Taiwan_Stroke_CI_AS

先去了解這預存程序是由那位工程師撰寫,此程序用途是使用在什麼地方,必須注意的相關事項都先寫在前面開頭,以免其他工程師在修改的過程中「發生非此程序應該要做的事而脫離了」,也是要避免發生一些不可預期的事情,當然後續的權限管理上也要做一些設定。

[導入來自於 SQL SERVER 資料表或是預存程序]

您新增一個空的 SQL 專案時,都是一片空白...這時候我們就要從 SQL SERVER 的資料庫內匯入相關 Table、預存程序、函式 等相關資訊,這時候您可以選擇專案後按右鍵就會出現以下畫面

https://ithelp.ithome.com.tw/upload/images/20190207/20104851zoBJ5hGSQr.jpg

選擇紅色框的功能後會出現以下畫面,並以畫面上的步驟進行選擇

https://ithelp.ithome.com.tw/upload/images/20190207/20104851hbwpY1qPf1.jpg

假如您都己經選擇完成,就會有以下畫面

https://ithelp.ithome.com.tw/upload/images/20190212/20104851JbH6fNnJHv.jpg

注意事項
假如您使用了 Visual Studio Online 或是 Git 的方式,那我會建議以版本控制為主,以團隊合作的版本控制為主別自行載入,就算是 一個人獨立開發也要做版本控制喔!!

假如您己經確定那些資料表是可以匯入,那您就可以進行匯入己勾選的資料表,匯入完成,您就可以看到要匯入的資料表己匯入了專案了

https://ithelp.ithome.com.tw/upload/images/20190207/2010485145g8g2VA2p.jpg

那您就可以完成這些資料表與預存程序的處理。

[發行您的預存程序或是其他函式]

當您撰寫好 [預存程序] 會想要發行到資料庫,您要先考量與注意幾個問題點!!

  1. 己經上線中的資料庫,千萬別用 Visual Studio SQL Project 來進行發行,將可能發生無法預期的問題,除非你發行的資料庫是 "空白" 只是當做練習的話就可以。

  2. 發行前建議將 "正式環境資料庫" 備份回來測試,並且確定執行無誤再交由 "發行者" 來進行發佈的動作,以免發生無法預期的問題。

  3. 開發者與發行者必須分工,千萬別兩個身份都是一個人。除非您己經是 [資深工程師] 功力可以在建立與撰寫的過程中就可以了解到修改過程會影響到那些程序。

  4. 預存程序中呼叫其他預存程序,必須多加測試,別導致無限迴圈拖累整個資料庫。

  5. 每一個預存程序都必須要有自己的記錄 >> 記錄著執行過程與效率的評估等資訊

以上幾點您都己經確定 OK ,那就可以進行發行的動作。

[執行前設定資料庫連線]

請先選擇 [SQL專案 >> 屬性 >> 偵錯 >> 目標連接字串] 如下圖

https://ithelp.ithome.com.tw/upload/images/20190207/20104851pUAtPh4Q3C.jpg

選擇您要連線的資料庫目標位置,並測試是否可以連線成功。確定您己經連線資料庫己經成功,就可以進行發行的動作。但發行的部份我會建議用 VS 2017 >> 工具 >> SQL SERVER 真的會比較方便。

但...你的資料己經達到 10 多萬筆的話,我還是建議您用 [SQL SERVER 備份與還原] 方式來取得整個資料庫的內容會比較快。用 VS 2017 SQL TOOLS 工具會比較適合「開發」為主來導入結構與資料。備份等相關方法可以參考我所寫的

[SQL SERVER]-資料庫備份-語法] (http://https://ithelp.ithome.com.tw/articles/10210387)

此說明提供了 "完整備份與差異性備份" 的語法,只要導入一些 JSON 就可以方便備份資料庫,透過排程下達執行 [備份預存程序] 就可以了,也可以備份其他資料庫只要改 JSON 即可。

Visual Studio SQLSERVER Tools [資料比較 & 結構描述比較] 這部份我也用了很久..不太記得這工具什麼時候出來的,但就是一個 好用的工具 幫助了我執行專案上極大的方便與應用。


尚未有邦友留言

立即登入留言