SQL Server OUTPUT指令

OUTPUT用在新、刪、改等資料處理動作中
可以即時得知剛剛操作動作的結果
配合inserted、deleted二個暫存表
除了顯示基本資料狀態,還可以將
顯示出來的狀態另存到別張表中








--OUTPUT用法
--基本用法,顯示剛剛INSERT 的結果-------------------------------
INSERT INTO 匠匠 
OUTPUT inserted.*
VALUES(27,'蛋塔',35)
--基本用法,顯示剛剛DELETE 的結果-------------------------------
DELETE 匠匠 
OUTPUT deleted.*
WHERE 產品編號 = 27
--基本用法,顯示剛剛UPDATE 的結果-------------------------------
DELETE 
UPDATE 匠匠
SET 價錢 =38
OUTPUT inserted.價錢 AS 新價 ,deleted.價錢 AS 舊價
    ,inserted.價錢 - deleted.價錢 AS 價差
WHERE 產品編號 = 27


-----------------------------------------------------------
--可以建一張表,再配合STORED PROCEDURE另存異動紀錄---------------
CREATE TABLE 匠匠追蹤
(
 產品編號 INT,
 新品名 NVARCHAR(5),
 舊品名 NVARCHAR(5),
 新價錢 MONEY,
 舊價錢 MONEY,
 異動狀態 NVARCHAR(8),
 帳號  VARCHAR(200) DEFAULT SUSER_SNAME(),
 時間 DATETIME DEFAULT GETDATE()
)
GO

--建立新增追蹤PROCEDURE---
CREATE PROC 匠匠新增 @id INT,@name NVARCHAR(5),@price MONEY
AS
 INSERT INTO 匠匠 
 OUTPUT inserted.產品編號,inserted.品名,inserted.價錢,'新增產品' 
   INTO 匠匠追蹤(產品編號,新品名,新價錢,異動狀態)
 VALUES(@id,@name,@price)
GO

--建立刪除追蹤PROCEDURE---
CREATE PROC 匠匠刪除 @id INT
AS
 DELETE 匠匠 
 OUTPUT deleted.產品編號,deleted.品名,deleted.價錢,'刪除產品' 
   INTO 匠匠追蹤(產品編號,舊品名,舊價錢,異動狀態)
 WHERE 產品編號 = @id
GO

--建立更新追蹤PROCEDURE---
CREATE PROC 匠匠異動 @id INT,@name NVARCHAR(5),@price MONEY
AS
 UPDATE 匠匠
 SET 價錢 =@price,品名 = @name
 OUTPUT inserted.品名,inserted.價錢,
     deleted.品名,deleted.價錢,'更新產品' 
     INTO 匠匠追蹤(新品名,新價錢,舊品名,舊價錢,異動狀態)
 WHERE 產品編號 = @id
GO

SELECT * FROM 匠匠追蹤

--當程式人員有需要資料異動,只要呼叫PROCEDURE即可---------
EXEC 匠匠新增 26,'茶葉蛋',8
EXEC 匠匠異動 26,'大茶葉蛋',18
EXEC 匠匠刪除 26

留言

熱門文章