sql-server-2008 - 如何在存储过程中模拟 SELECT 中的多行?
问题描述
这可能是一个愚蠢的问题,但我已经尝试了几件事,但无法获得我想要的结果。
我目前正在测试一个非常小的 API,它使用 SQL Server 数据库中的数据。为了测试它,我使用了一个“模拟”一行并返回它的存储过程。像这样:
CREATE PROCEDURE ONE
(@FRUITCODE VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
SELECT
'BANANA' as NAME
WHERE
@FRUITCODE > 0;
END;
这可以很好地模拟一行,但我想返回更多这样的行:
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;
但这会返回多个“NAME”列。
如何返回多行?我正在使用 SQL Server。
解决方案
我们需要使用VALUES
表构造函数,基本上是一个内联的“发明”表,请参阅相关文档。
它也可以完成,UNION ALL
但更冗长。
SELECT *
FROM (VALUES
('BANANA'),
('STRAWBERRY'),
('MELON')
) AS v (NAME)
WHERE @FRUITCODE > 0
推荐阅读
- javascript - 当另一个元素在它上面时从 div 获取标题
- html - 突出显示 div,并使页面上的其他内容变暗
- python - 比较和更新字典?
- variables - Powerapps - 图库中的变量
- excel - 对象“HPageBreaks”的方法“计数”失败
- c# - 如何禁用 StyleCop Plus 规则 SP2001“仅允许使用制表符进行缩进”
- core-audio - 如何在 AUInternalRenderBlock 中实时使用 Superpower TimeStretching
- wordpress - 如何从单个仪表板管理多个 wordpress 帖子?
- vba - 用于移动电子邮件的 Outlook 宏将副本发送到删除文件夹
- javascript - router.use() 在本地机器上工作,但在服务器上分解时它不起作用