当我传递参数1时,我想编写存储过程以获得以下输出,
column_name
-----------
option 1
option 2
option 3
当我传递参数 2 时,输出应该是,
column_name
-----------
option 5
option 6
是否可以在不使用任何表的情况下创建过程来获取此输出?
当我传递参数1时,我想编写存储过程以获得以下输出,
column_name
-----------
option 1
option 2
option 3
当我传递参数 2 时,输出应该是,
column_name
-----------
option 5
option 6
是否可以在不使用任何表的情况下创建过程来获取此输出?
我SELECT FROM VALUES
用于此类任务。您的情况可能的解决方案:
SELECT column_name
FROM (VALUES
( 'option 1' )
,( 'option 2' )
,( 'option 3' )
) result (column_name)
WHERE @param = 1
UNION
FROM (VALUES
( 'option 5' )
,( 'option 6' )
) result (column_name)
WHERE @param = 2
CREATE PROCEDURE uspTest
(
@param INT
)
AS
BEGIN
IF @param = 1
SELECT 'Option 1' column_name
UNION ALL
SELECT 'Option 2'
UNION ALL
SELECT 'Option 3'
ELSE
SELECT 'Option 5' column_name
UNION ALL
SELECT 'Option 6'
END
通过使用 SELECT 和 UNION 的组合,您可以生成如下手动构建的表:
SELECT 'Option 1' as Option
UNION
SELECT 'Option 2' as Option
UNION
SELECT 'Option 3' as Option
您可以将此与控制/流语句结合起来,以确定应使用哪个 SELECT/UNION 组合。不幸的是,你有 MySQL 和 sql server 标签,所以我不能让存储过程的语法更具体,但希望这应该是你熟悉的一点!
无需在数据库中创建任何物理表来存储这些信息。您可以在存储过程中使用临时表或表变量来存储这些数据。您可以创建存储过程,例如:
create PROCEDURE temp
@id int
AS
BEGIN
declare @temptable table (column_name varchar(max))
if @id = 1
begin
insert into @temptable values('option 1');
insert into @temptable values('option 2');
insert into @temptable values('option 3');
end
if @id = 2
begin
insert into @temptable values('option 4');
insert into @temptable values('option 5');
end
select * from @temptable
END
GO
CREATE PROCEDURE sp_ArbitraryOutput (@parm Int)
AS
CASE
WHEN COALESCE(@parm, 1) = 1 THEN
SELECT "option 1" AS column_name
UNION
SELECT "option 2" AS column_name
UNION
SELECT "option 3" AS column_name
WHEN @parm = 2 THEN
SELECT "option 4" AS column_name
UNION
SELECT "option 5" AS column_name
UNION
SELECT "option 6" AS column_name
END
GO