從連結伺服器執行另一個儲存過程中的儲存過程
我有一個問題,我不知道如何解決它,我在網上搜尋並找到了很好的建議,但我無法解決。
這就是問題所在:我的 PC 上執行了一個 SQL Server 實例,並且我將其中一個主伺服器連結
SRVOLD\SQLDESA
到它。我想從我的 PC 的 SQL Server 實例中執行主伺服器的儲存過程,並將結果插入到一個新表中。我找到了使用以下方法的完美方法:SELECT * INTO Bank FROM OPENQUERY([SRVOLD\SQLDESA], 'EXEC Bank_Database.Bank.usp_GetTDcodes 1, 5') GO
有關於此伺服器的重要資訊,它的 SQL Server 版本是 2008。記住這一點以備後用。
好的,所以我設法執行了這個儲存過程,但我發現了一些東西,原來在這個儲存過程中有另一個儲存過程的執行,檢查一下:
第一個儲存過程:
CREATE PROCEDURE Bank.usp_GetTDcodes (@code TINYINT = NULL, @qty TINYINT = NULL) WITH ENCRYPTION AS DECLARE @@msg VARCHAR(100) DECLARE @@OK INT DECLARE @@today CHAR(30) SELECT @@today = CONVERT(VARCHAR(30), GETDATE(), 112) + ' ' + CONVERT(VARCHAR(30), GETDATE(), 8) SELECT bnk_code, bnk_descr FROM CODBNK WHERE bnk_code < 50 EXECUTE @@OK = Bank.usp_WriteEvent @qty, @code, @@today, 500 IF @@OK <> 0 RETURN @@OK RETURN 0 GO
現在讓我們看一下第二個儲存過程:
CREATE PROCEDURE Bank.usp_WriteEvent (@code TINYINT = NULL, @qty TINYINT = NULL, @date DATETIME = NULL, @number SMALLINT = NULL, @ideve INT = 0 OUTPUT) WITH ENCRYPTION AS DECLARE @@sdate VARCHAR(30) DECLARE @@ret SMALLINT INSERT INTO Event (eve_code, eve_qty, eve_date, eve_number) VALUES (@code, @qty, @date, @number) SET @@ret = @@error IF @@ret = 0 BEGIN SELECT @ideve = @@IDENTITY SELECT @@sdate = CONVERT(VARCHAR(30), @date, 112) + ' ' + VARCHAR(30), @date, 8) END ELSE RETURN @@ret GO
當我執行第一個儲存過程時,我能夠將它的結果插入到一個新表中,但我希望找到一個插入到表中的新行
Event
,因為這是執行第二個儲存過程時的預期結果。所以我開始在網上搜尋並通過執行以下操作來實現這一目標:
SELECT * INTO Bank FROM OPENQUERY([SRVTEST\SQLDESA], 'SET FMTONLY OFF;SET NOCOUNT ON;EXEC Bank_Database.Bank.usp_GetTDcodes 1, 5') GO
所以,
SET FMTONLY OFF;SET NOCOUNT ON
工作,我很高興。但是發生了一些事情…我需要執行相同的儲存過程,但這次添加了一個新的連結伺服器
SRVNEW\SQLDESA
。此伺服器的版本是 2012,因此新的解決方案不起作用。我一直在嘗試不同的方法,只有一種方法可以使它工作,如下:EXEC [SRVNEW\SQLDESA].[Bank_Database].Bank.usp_GetTDcodes 1,5
但這對我不起作用,因為我需要將第一個儲存過程結果放入一個新表中。而且我不知道它的架構,這就是為什麼
SELECT INTO
最適合我的原因。我不知道我還能做什麼,也許OPENQUERY
那不起作用?我需要更改其他內容嗎?PD:我也試過用
OPENROWSET
沒用。在此先感謝,祝您有美好的一天!和平!
一些參考資料: http: //www.sommarskog.se/share_data.html#OPENQUERY
我使用了@Scott Hodgin 建議的函式並使用該資訊創建了表格。謝啦!
注意:如果您的儲存過程正在使用臨時表,這將無法按照頁面中的指定工作:
無法確定結果,因為批處理包含臨時表並且 sp_describe_first_result_set 不支持。