簡體   English   中英

T-SQL動態執行存儲過程

[英]T-SQL Dynamically execute stored procedure

我在T-SQl中有一個類似於此的日志記錄功能:

CREATE PROCEDURE [logging]    
@PROCEDURE VARCHAR(50),
@MESSAGE VARCHAR(MAX)
AS
BEGIN
    PRINT @MESSAGE

END;
GO

我可以這樣稱呼它:

execute logging N'procedure_i_am_in', N'log_message';

由於我的存儲過程名稱有點長,我想寫一個別名或內聯函數左右,用我當前的過程調用日志記錄過程。 像這樣的東西(破碎了):

declare @_log varchar(max)
set @_log = 'execute logging N''procedure_i_am_in'', '
execute @_log N'MESSAGE!'

我會把別名放在每個程序的頂部。

你怎么看?

非常簡單

CREATE PROCEDURE [logging]    
   @PROCID int,,
   @MESSAGE VARCHAR(MAX)
-- allows resolution of @PROCID in some circumstances
-- eg nested calls, no direct permission on inner proc
WITH EXECUTE AS OWNER
AS
BEGIN
    -- you are using schemas, right?
    PRINT OBJECT_SCHEMA_NAME(@PROCID) + '.' + OBJECT_NAME(@PROCID);
    PRINT @MESSAGE
END;
GO

然后

execute logging @@PROCID, N'log_message';

OBJECT_SCHEMA_NAME上的 MSDN和@@ PROCID

編輯:

請注意在事務期間登錄表。 在回滾時,您將丟失日志數據

比它的價值更麻煩,但它會

Set @_log = 'exec ....N' + 'MESSAGE!'
Exec (@log)

所以沒有太多用處。

就個人而言,我只是重命名SP,或者推動使用簡潔命名的功能。 如果你必須管理風格設施恕我直言,建立字符串並執行它們是唯一的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM