使用程序的结果进一步条件?

时间:2017-04-13 11:54:27

标签: sql-server stored-procedures

我编写了一个过程,它提取了两列,其中包含解密另一个表中密码所需的相应对称密钥名称和证书名称。它的工作非常好。我得到了我的结果,到目前为止一直有效。

"抓取"程序看起来像这样:

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"在另一个查询中。

3 个答案:

答案 0 :(得分:0)

您必须先定义 TempTable 然后将已执行存储结果保存在其中,如下所示:

INSERT INTO #YourTable
EXEC SP

答案 1 :(得分:0)

最简单的方法是insert-exec,但它确实存在一些问题。如果插入过程的输出列发生变化,则会出现错误。还有其他潜在问题,请参阅附带的参考资料。

insert-exec示例:

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

insert-exec的替代方法是使用表值函数,共享临时表,全局临时表和表值参数。

参考

答案 2 :(得分: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()
;