2015-03-13 57 views
1

我正在寫一個很長的QC腳本來檢查導入後的數據。在腳本中的每一步,我想結果寫入到審計日誌:常用查詢的存儲過程?

insert into [AUDIT_LOG] (finished, query, result) 
values (getdate(), 'Create QC table', 'Table Created'); 

我使用此查詢超過100倍的整個腳本。有沒有辦法縮短這個?像

audit_log('Create QC table', 'Table Created'); 

東西,所以這看起來像(僞)

begin function audit_log(@query, @result) 
    insert into [AUDIT_LOG] (finished, query, result) 
    values (getdate(), @query, @result); 
end 

自定義函數這是什麼存儲過程都是爲了? (我是一個初學者試圖找出一些東西)

回答

5

你的想法是正確的,你的代碼是密切的。

create proc dbo.make_audit_log(@query varchar(100), @result varchar(100)) as 
    insert into [AUDIT_LOG] (finished, query, result) 
     values (getdate(), @query, @result); 
go 

然後使用這個

exec dbo.make_audit_log 'your query', 'your result'. 

編輯:好點,由@IvanGerasimenko - 表和SP必須有不同的名稱,代碼上面相應調整了。

+1

SP和表名不能是同一http://dba.stackexchange.com/questions/48051/can -i-給最同名到一個表和-A-存儲過程。除非他們有兩種不同的模式。 – 2015-03-13 12:37:08

+0

Pr0no,函數不是一個選項,因爲除了本地表變量之外,您不能在常規表的函數內使用INSERT。 – tcbrazil 2015-03-13 12:39:01

+0

我正在使用'if object_id('make_audit_log','U')不是null drop procedure make audit_log go'並且我返回'Command(s)completed completed.'然而,如果我然後運行'create procedure'語句,我得到返回'數據庫中已經有一個名爲'make_audit_log'的對象。'爲什麼它不被刪除,即使我沒有返回錯誤? 創建過程dbo.audit_log( \t @query VARCHAR(100) \t,@result VARCHAR(100) )作爲 \t插入到[CA131RB01_QC](成品,查詢結果) \t值(GETDATE(), @query,@result) go – Pr0no 2015-03-13 13:12:17

2

聲明爲一個存儲過程調用的地方,它的腳本中:

CREATE PROCEDURE [dbo].[SaveAuditLog] 
    @query NVARCHAR(255) 
    ,@result NVARCHAR(255) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO [dbo].[AUDIT_LOG] (finished, query, result) 
    VALUES (GETDATE(), @query, @result); 
END 
GO 

--calling 

EXEC [dbo].[SaveAuditLog] @query = 'some query', @result = 'some result';