是否可以将选择查询的结果存储在存储过程中,然后在存储过程中使用这些结果来进一步查询结果集?
示例 //我的存储过程(简化示例)
ALTER PROCEDURE [dbo].[users]
AS
BEGIN
Declare @users nvarchar(1000)
set @users = select * from users
// query @users result for counts, sums where clauses, etc...
END
答案 0 :(得分:6)
您希望users
是表变量或临时表而不是nvarchar类型。
表变量版
DECLARE @users TABLE (
UserId int,
...
)
INSERT INTO @users
(UserId, ...)
SELECT *
FROM users
SELECT *
FROM AnotherTable t
INNER JOIN @users u
ON ...
临时表版本
CREATE TABLE #users (
UserId int,
...
)
INSERT INTO #users
(UserId, ...)
SELECT *
FROM users
SELECT *
FROM AnotherTable t
INNER JOIN #users u
ON ...
您也可以隐式创建临时表。
SELECT *
INTO #users
FROM users
SELECT *
FROM AnotherTable t
INNER JOIN #users u
ON ...
答案 1 :(得分:2)
您可以使用表变量:
DECLARE @users TABLE (...columns...);
INSERT @users SELECT * FROM dbo.Users;
虽然取决于行数,但#temp表通常更安全,因为它将具有统计信息,您可以创建其他索引等。
CREATE TABLE #users (...columns...);
INSERT #users SELECT * FROM dbo.Users;
答案 2 :(得分:1)
您可以使用临时表或表变量来执行此操作。这是一个比较选项的blog post。