如何在存储过程中模拟 SELECT 中的多行?
How to mock multiple rows in a SELECT in a stored procedure?
这可能是一个愚蠢的问题,但我已经尝试了几种方法,但无法获得我想要的结果。
我目前正在测试一个非常小的 API,它使用来自 SQL 服务器数据库的数据。为了测试它,我正在使用一个存储过程来“模拟”一行并 returns 它。像这样:
CREATE PROCEDURE ONE
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT
'BANANA' as NAME
WHERE
@FRUITCODE > 0;
END;
这可以很好地模拟一行,但我想 return 更多这样的行:
NAME
---------
BANANA
STRAWBERRY
MELON
我试过了
CREATE PROCEDURE TWO
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT
'BANANA', 'STRAWBERRY', 'MELON' AS NAME
WHERE @FRUITCODE > 0;
END;
但这会产生多个列,一个是 NAME,其他的列名称为空。
我也试过了
CREATE PROCEDURE THREE
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT 'BANANA' AS NAME
WHERE @FRUITCODE > 0;
SELECT 'STRAWBERRY' AS NAME
WHERE @FRUITCODE > 0;
SELECT 'MELON' AS NAME
WHERE @FRUITCODE > 0;
END;
但这会生成单独的“表格”,而不是一个包含多行的表格。
最后我试过了
CREATE EPROCEDURE FOUR
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT
'BANANA' AS NAME,
'STRAWBERRY' AS NAME,
'MELON' AS NAME
WHERE @FRUITCODE > 0;
END;
但这 return 有多个“NAME”列。
我怎样才能 return 多行?我正在使用 SQL 服务器。
我们需要使用 VALUES
table 构造函数,基本上是一个内联 'invented' table,请参阅 docs。
它也可以用 UNION ALL
来完成,但那样更冗长。
SELECT *
FROM (VALUES
('BANANA'),
('STRAWBERRY'),
('MELON')
) AS v (NAME)
WHERE @FRUITCODE > 0
这可能是一个愚蠢的问题,但我已经尝试了几种方法,但无法获得我想要的结果。
我目前正在测试一个非常小的 API,它使用来自 SQL 服务器数据库的数据。为了测试它,我正在使用一个存储过程来“模拟”一行并 returns 它。像这样:
CREATE PROCEDURE ONE
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT
'BANANA' as NAME
WHERE
@FRUITCODE > 0;
END;
这可以很好地模拟一行,但我想 return 更多这样的行:
NAME
---------
BANANA
STRAWBERRY
MELON
我试过了
CREATE PROCEDURE TWO
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT
'BANANA', 'STRAWBERRY', 'MELON' AS NAME
WHERE @FRUITCODE > 0;
END;
但这会产生多个列,一个是 NAME,其他的列名称为空。
我也试过了
CREATE PROCEDURE THREE
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT 'BANANA' AS NAME
WHERE @FRUITCODE > 0;
SELECT 'STRAWBERRY' AS NAME
WHERE @FRUITCODE > 0;
SELECT 'MELON' AS NAME
WHERE @FRUITCODE > 0;
END;
但这会生成单独的“表格”,而不是一个包含多行的表格。
最后我试过了
CREATE EPROCEDURE FOUR
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT
'BANANA' AS NAME,
'STRAWBERRY' AS NAME,
'MELON' AS NAME
WHERE @FRUITCODE > 0;
END;
但这 return 有多个“NAME”列。
我怎样才能 return 多行?我正在使用 SQL 服务器。
我们需要使用 VALUES
table 构造函数,基本上是一个内联 'invented' table,请参阅 docs。
它也可以用 UNION ALL
来完成,但那样更冗长。
SELECT *
FROM (VALUES
('BANANA'),
('STRAWBERRY'),
('MELON')
) AS v (NAME)
WHERE @FRUITCODE > 0