Вы можете использовать временную таблицу, как указано выше, или использовать тип таблицы (я использую демонстрационную базу данных AdventureWorks2014 для этих примеров):
CREATE PROCEDURE TableVariableDemo(
@Color nvarchar(15),
@Size nvarchar(5))
AS
BEGIN
DECLARE @Results TABLE(ProductID int, [Name] nvarchar(255), ProductNumber nvarchar(25), Color nvarchar(15), Size nvarchar(5))
INSERT INTO @Results (ProductID, [Name], ProductNumber, Color, Size)
SELECT
ProductID,
[Name],
ProductNumber,
Color,
Size
FROM
Production.Product
WHERE
Color = @Color AND
Size = @Size
SELECT
ProductID,
[Name],
ProductNumber,
Color,
Size
FROM
@Results
END
Решение хорошо, когда вы ожидаете не слишком многостроки возвращаются.Когда вы ожидаете много строк, возвращаемых запросом, лучше использовать временную таблицу.То же самое с использованием временной таблицы:
CREATE PROCEDURE TempTableDemo(
@Color nvarchar(15),
@Size nvarchar(5))
AS
BEGIN
CREATE TABLE #Results(ProductID int, [Name] nvarchar(255), ProductNumber nvarchar(25), Color nvarchar(15), Size nvarchar(5))
INSERT INTO #Results (ProductID, [Name], ProductNumber, Color, Size)
SELECT
ProductID,
[Name],
ProductNumber,
Color,
Size
FROM
Production.Product
WHERE
Color = @Color AND
Size = @Size
SELECT
ProductID,
[Name],
ProductNumber,
Color,
Size
FROM
#Results
DROP TABLE #Results
END
Но мне интересно, почему вы не используете что-то вроде этого:
CREATE PROCEDURE SelectDemo(
@Color nvarchar(15),
@Size nvarchar(5))
AS
BEGIN
SELECT
ProductID,
[Name],
ProductNumber,
Color,
Size
FROM
Production.Product
WHERE
Color = @Color AND
Size = @Size
END
С наилучшими пожеланиями
Майкл