前言:
本文是要寫關於MSSQL的預存程序(store procedure),變數的宣告與操作方式,以及如何進行簡易的除錯。


首先,上一篇文章的範例程式增加了變數修改如下,褐色部份可以看到DECLARE是宣告變數的句法,set可以修改變數,並讓SQL指令取這些變數進行存取
程式碼如下:(下圖為參考圖,由於有些部份有修改(例如分號),請看程式碼)

USE [testNews]
GO
/****** Object: StoredProcedure [dbo].[TEST_ADD] Script Date: 2015/8/7 下午 04:24:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TEST_ADD]
AS
BEGIN
SET NOCOUNT ON

--宣告變數
DECLARE
@intId int,
@sql varchar(100),
@txtName varchar(50)

--修改變數
set @intId = 1

--執行sql語法
UPDATE dbo.test set test_time = getdate() where id = @intId
select * from dbo.test where id = @intId

--這個是MSSQL的顯示方式,有點像DBMS_OUTPUT.PUT_LINE
PRINT '----錯誤寫法 --@intId = ' + char(@intId) +'---------'
PRINT '----正確寫法1--@intId = ' + CAST(@intId as varchar(10)) +'---------'
PRINT '----正確寫法2--@intId = ' + CONVERT(varchar(10),@intId) +'---------'
PRINT '----正確寫法3--@intId = ' + LTRIM(STR(@intId,10)) +'---------'
END


修改頁


執行頁


上面的這個程式是沿用前一篇教學的程式碼修改而來的,就是把某資料表id=1的資料的test_time欄位更新為現在時間。上述的程式有個PRINT的指令的結果可以在訊息頁看到該變數值,但這張圖片的print行沒有變數值,這個char()這行的用法是錯的,有圖為證:
訊息頁

從參考網站:http://www.sqlservercurry.com/2010/09/convert-integer-to-string-in-sql-server.html,找到將int轉varchar的方式如下
PRINT '----正確寫法1--@intId = ' + CAST(@intId as varchar(10)) +'---------';
PRINT '----正確寫法2--@intId = ' + CONVERT(varchar(10),@intId) +'---------';
PRINT '----正確寫法3--@intId = ' + LTRIM(STR(@intId,10)) +'---------';
結果如下:
訊息頁  
這三種改法呈現的結果相同,可以看到修改頁如何呈現變數。以實務經驗來看,用這個方式debug就很有效率,平常除錯不一定要下斷點,這個程式就是一例。




本文總結:
1、sp如何宣告變數與修改變數
2、sp如何列出變數值,PTINT的用法相當於oracle的DBMS_OUTPUT.PUT_LINE函式,不一定非得下中斷點,這個用法我相信也很常見。
3、int轉varchar的三種方式


arrow
arrow

    貓羽 發表在 痞客邦 留言(0) 人氣()