這次要研究的是MSSQL的預存程序,這次只研究如何執行和存檔相關的問題,還有一些操作等下一篇再研究。首先介紹使用到的程式碼,資料表的介紹先省略,因為以下的查詢只是更新指定id的時間而已,各位可以換成自己的資料表進行研究。
UPDATE dbo.test set test_time = getdate() where id = '1'
select * from dbo.test where id = '1'
查詢結果如下:
新增預存程序的方式是,在以下畫面在目標資料表右鍵 > 新增查詢
接下來,以這個程式為例,把查詢的棕色部份加上去(其實只要UPDATE那行,定期執行都是改資料表很少定期查詢的)。
--新增的語法如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE TEST_ADD
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.test set test_time = getdate() where id = '1'
END
GO
--修改的語法如下:
USE [testNews]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TEST_ADD]
--@test_id varchar(10)
AS
SET NOCOUNT ON
BEGIN TRAN
UPDATE dbo.test set test_time = getdate() where id = '1'
COMMIT TRAN
ps:建好預存程序要重開sql server,這樣才可以避免出現"找不到物件"的錯誤訊息。
要注意的是,如果要新增預存程序是在新增查詢的時候使用,如果只是執行指令只要右鍵執行預存程序或是alt+f5都可以。如果有重覆的資料會顯示已有預存程序的錯誤訊息如下圖。
最後是在查詢中執行預存程序的方式,比較一般的寫法是像下面這樣直接exec再查詢看結果,可以看到時間有更新。
exec dbo.TEST_ADD
select * from dbo.test where id = '1'
另一種方式是範例的方式,這個做法就比較正式了,應該說store procedure的執行方式都大同小異,先切換資料表再exec,變數只是接回傳值如下:
USE [testNews]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[TEST_ADD]
SELECT 'Return Value' = @return_value
GO
結論:
這裡寫的是如何寫一個簡單的預存程序,以修改指定資料的日期為例,當然預存程序還有很多東西可以研究,這篇是寫簡單的建立與執行的方式,就先寫到這邊。