2011-01-31 81 views
2

我在SQL服务器的存储过程2005,它返回三个变量在一个单一的线,是这样的(极度简化的)例子:如何在不使用临时存储过程的结果集中选择一列。表?

CREATE PROCEDURE proc1 
AS 
    DECLARE @col1 VARCHAR(4) 
    DECLARE @col2 VARCHAR(4) 
    DECLARE @col3 VARCHAR(4) 
    SET @col1 = 'val1' 
    SET @col2 = 'val2' 
    SET @col3 = 'val3' 

    SELECT @col1 col1, @col2 col2, @col3 col3 
GO 

在外部应用程序,我需要执行存储过程和过程三个值之一。由于此应用程序的限制,它将始终只使用第一列。

所以,我正在寻找的是一种方法来限制过程的结果集为一列或重新安排列的顺序。

IIRC MySQL支持像下面的子查询,但SQL Server不:

SELECT col1 FROM (EXEC proc1) 

我知道我可以使用临时表(或表变量)来缓冲的结果,然后选择一列,但我希望有更多的“浓缩”的方式莫过于:

CREATE TABLE #tmp (col1 VARCHAR(4) NOT NULL, col2 VARCHAR(4) NOT NULL, col3 VARCHAR(4) NOT NULL) 
INSERT INTO #tmp EXEC proc1 
SELECT col2 FROM #tmp 
DROP TABLE #tmp 

预先感谢你可以给任何提示,

帕特里克

回答

1

如果可以将存储的proc转换为table valued function,则可以从中选择任意列。如果您仍然需要存储过程(对于其他无法更改的系统),则可以将所有逻辑放入函数中,然后让存储的过程调用该过程。否则,如果您不能从存储过程中重新定位代码,那么通过临时表执行操作就可以做到最好,我担心。

+0

非常感谢,您对表格重要功能的暗示的确帮助了我。我不知道它们存在。 – 2011-01-31 11:29:44

相关问题