2017-04-13 30 views
0

我編寫了一個過程,讓我獲取兩列,這兩列包含相應的對稱密鑰名稱和證書名稱,需要解密另一個表中的密碼。它工作得很好。我得到了我的結果,這是迄今爲止的工作。使用過程的結果來獲得更多條件?

的「取」的過程是這樣的:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [fetch_data] 

AS 

BEGIN 

SET NOCOUNT ON; 

SELECT [KeyName], [CertName] FROM [Group] 

INNER JOIN LT_Groups ON [Group].GroupId = LT_Groups.GroupId 

INNER JOIN Verify ON Verify.UserID = LT_Groups.UserId AND VERIFY.USERNAME = 
CURRENT_USER 

END 

GO 

EXEC fetch_data 

現在我想寫另一過程,是應該與第一個結果工作。我只是不知道如何在另一個查詢中使用我的「fetching_data」的結果。

回答

0

你必須定義不是Temptable,然後存儲執行的第一個存儲過程結果它象下面這樣:

INSERT INTO #YourTable 
EXEC SP 
0

最簡單的方法是insert-exec,但它確實有一些問題。如果插入過程的輸出列發生更改,您將收到錯誤消息。還有其他潛在的問題,請參閱更多的參考資料。

插入-EXEC例如:

create table #fetch_data (keyname varchar(32), certname varchar(32)); 
insert into #fetch_data 
    exec dbo.fetch_data 

替代插入-EXEC使用表值函數,共享一個臨時表,全局臨時表,並且表值參數。

參考

0

table-valued function可能比一個store procedure更合適,在這種情況下。

可以從其他查詢的from clause中調用表值函數,使其返回的值隨時可用。

-- Defines table-valued function. 
CREATE FUNCTION fetch_data() 
RETURNS TABLE 
AS 
RETURN 
(
    -- Get detiails. 
    SELECT 
     [KeyName], 
     [CertName] 
    FROM 
     [Group] 
     INNER JOIN LT_Groups ON [Group].GroupId = LT_Groups.GroupId 
     INNER JOIN Verify  ON Verify.UserID = LT_Groups.UserId 
           AND VERIFY.USERNAME = CURRENT_USER 
); 
GO 


-- Using table-valued function. 
SELECT 
    * 
FROM 
    fetch_data() 
;