我可以在存储过程中随SQL数据一起返回附加值吗?

我可以在存储过程中随SQL数据一起返回附加值吗?,sql,stored-procedures,Sql,Stored Procedures,我正在尝试将两个存储过程合并为一个。以前我有: @argument int SELECT val1, val2, val3 FROM table as x INNER JOIN( ... ) as y ON x.val1 = y.val2 WHERE someCondition = @argument 然后我将启动一个几乎相同的存储过程,其中唯一的区别是条件 我想找到一种方法,将这些过程结合起来

我正在尝试将两个存储过程合并为一个。以前我有:

@argument int

SELECT val1, val2, val3 
  FROM table as x
       INNER JOIN(
                   ... ) as y 
                  ON x.val1 = y.val2
 WHERE someCondition = @argument
然后我将启动一个几乎相同的存储过程,其中唯一的区别是条件

我想找到一种方法,将这些过程结合起来,创建如下内容:

@argument int

SELECT val1, val2, val3,
       isCondition1 = true -- Additional return value
  FROM table as x
       INNER JOIN (
                    ... ) as y 
                  ON x.val1 = y.val2
  WHERE someCondition = @argument

SELECT val1, val2, val3,
       isCondition1 = false -- Additional return value
    FROM table as x
         INNER JOIN(
             ...) as y 
             ON x.val1 = y.val2
    WHERE someOtherCondition = @argument

这是可能的吗?

使用可返回可变列数的存储过程不是一个好主意

但是,看起来这两个查询的
附加返回值
是可兼容的

如果结果列的数量、类型或名称不同,那么我将保留2个存储过程,但我将在一个视图中删除常见的繁重内容,然后这两个存储过程都将使用该视图

CREATE VIEW vwWithCommonWork
  AS
    SELECT val1, val2, val3, -- any other useful common columns here
    FROM table as x
    INNER JOIN(
    ...
    ) as y ON x.val1 = y.val2
    -- No WHERE
然后,PROC使用该视图:

程序1

程序2


这是完全可以接受的,我将在某种程度上使用它。谢谢回答你的问题,是的。在我最初的问题中,我请求的解决方案将返回相同数量的列。两个查询都将返回一个布尔值。你能做到吗?我可以把它与您的答案结合起来吗?如果您返回相同的列,那么您仍然可以使用一种技术来组合过程,但是,它带来了一个难题:是使用If/else分支并有两个单独的查询(不利于参数嗅探),还是一个带有可选过滤器模式的查询(不利于查询计划),或者动态sql(很臭)。另一个(我假设是sql server,顺便说一句)
SELECT val1, val2, val3, isCondition1 = 'true'
FROM vwWithCommonWork
WHERE someCondition = @argument
SELECT val1, val2, val3, isCondition1 = 'false'
FROM vwWithCommonWork
WHERE someOtherCondition = @argument