簡體   English   中英

SQL Server在命令行從另一個存儲過程中調用存儲過程

[英]SQL Server Calling a stored procedure from another stored procedure at the command line

我一直在研究數據庫備份自動化腳本,尤其是此鏈接中的一個:

http://support.microsoft.com/kb/2019698

我一切正常,甚至使用7zip,日志記錄以及在vbscript的幫助下通過電子郵件安排的通知都添加了自動壓縮功能。 但是,即使沒有所有這些,您也可以看到它有點沉重。 現在,它可以輕松達到400行代碼。

我真的不願意像這樣將所有東西都放在一個塊中,我想將其分開。 因此,可以說有一個名為BackupCompress.sql的壓縮文件和一個名為BackupLogReport.sql的日志文件,所有這些文件都將從主Backup.sql腳本內部調用。

反過來,Backup.sql腳本從設置為在調度程序中運行的Backup.bat文件運行。

所有這些都像魅力一樣。 但是我不知道如何從BackupLogReport.sql中調用BackupCompress.sql並傳遞參數並獲得返回值。

在Backup.bat文件中,我使用以下命令啟動所有內容並將參數傳遞給它:

SQLCMD -S %SQLDATABASE% -d master -i %BACKUP_FOLDER%\Backup.sql -v Pram1="%Pram1%"

在Backup.sql文件中,我可以通過以下方式簡單地獲取這些參數:

DECLARE @Param1 NVARCHAR(256) = '$(Param)'

從那時起,當我的腳本運行時,它將使用我想傳遞的任何內容。

我嘗試使用標准的sql存儲過程邏輯來調用另一個過程,如下所示:

EXEC    BackupCompress.sql
    @AnotherParam = @Param1

我也嘗試過:

EXECUTE sp_executesql BackupCompress.sql @Param1

最后我嘗試了:

SET @cmd = 'SQLCMD -S ' + @@ServerName + ' -d master -i $(BACKUP_FOLDER)\BackupCompress.sql -v Param1 = ' + @Param1
EXEC xp_cmdshell @cmd, no_output

但是它不起作用,被壓縮的文件也不會被壓縮。 我沒有收到錯誤消息。 其他一切都可以正常工作。

編輯:我在上一個上收到一條錯誤消息,但我已將其修復-但是,我仍然沒有得到我的小zip文件。 我什至將print's放入文件中,以查看它是否實際上已執行,但似乎沒有執行。

EDIT2:我嘗試過的另一個選項幾乎可行,但是無法弄清楚如何將sql文件中的參數傳遞給另一個文件...結果是,它生成一條錯誤消息,指出在將路徑視為時找不到文件一個文字字符串而不是我想傳遞的變量值。

:!!SQLCMD -S @@ServerName -d master -i @CFG_BACKUP_PATH\BackupCompress.sql -v Param1 = @Param1

xp_cmdshell可以返回值。 這些值可以捕獲到表變量中,您可以使用該表變量“查看”結果,並可能確定問題所在:

DECLARE @cmd VARCHAR(255);
DECLARE @Param1 NVARCHAR(256) = '$(Param)';
DECLARE @Results TABLE
(
    ResultsText NVARCHAR(MAX)
);

SET @cmd = 'SQLCMD -S ' + @@ServerName + '-d master -i $(BACKUP_FOLDER)\$(BackupCompress.sql) -v Param1 = ' + @Param1;
SET @cmd = 'DIR \';
INSERT INTO @Results (ResultsText)
EXEC xp_cmdshell @cmd;

SELECT *
FROM @Results;

您需要通過執行以下命令來確保為實例啟用xp_cmdshell

EXEC sp_configure 'xp_cmdshell',1;

暫無
暫無

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

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