我编写了一个过程,它提取了两列,其中包含解密另一个表中密码所需的相应对称密钥名称和证书名称。它的工作非常好。我得到了我的结果,到目前为止一直有效。
"抓取"程序看起来像这样:
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 :(得分: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()
;