是否可以在 SQL Server 中創建一個程序,其中另一個程序可以作為引數傳遞執行?泛型方法的類比。
例如:
ALTER PROCEDURE [db].[myProc]
...
@externalProc PROCEDURE?
...
BEGIN
DECLARE 2 datetime variables: start/end
SET start = GETDATE()
EXEC @externalProc
SET end = GETDATE()
//Other work with the received data
END
最重要的是,我想創建 1 個通用程序,該程序將對許多其他程序執行相同的操作。
uj5u.com熱心網友回復:
您可以將程序名稱作為包裝器存盤程序的引數傳遞并動態執行它。但是,我建議避免這種動態程序執行,因為它會導致許多問題。他們中的一些:
- 我們不知道引數程序內容的邏輯是什么
- 它可能導致 SQL 注入
- 它可能會導致安全問題
我正在為如何做到這一點的測驗用例提供示例代碼。我沒有考慮過 SQL 注入和其他事情。我只是想表明這是可能的。
-- stored procedure to call
create procedure dbo.test
as
select 1
-- Wrapper stored procedure
create procedure dbo.uber_proc
@procname VARCHAR(128)
as
begin
DECLARE @sql_stmt NVARCHAR(256) = 'EXEC ' @procname
EXEC(@sql_stmt)
end
-- Executing wrapper stored procedure
EXEC dbo.uber_proc 'dbo.test'
感謝@Iptr 的更新,我們還可以創建如下所示的包裝器存盤程序:
CREATE procedure dbo.uber_proc
@procname VARCHAR(128)
as
begin
EXEC @procname
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369150.html
標籤:sql sql-server 数据库
