Select 存储过程中的特定列

Select specific columns from the stored procedure

我在其他数据库中有一个由其他团队维护的存储过程。假设它当前返回 3 列,而我的系统只需要这 3 列 但是另一个团队可以添加更多列供他们自己使用,这导致我的系统出现故障。

其他数据库SP

ALTER PROCEDURE FirstSP 

AS
BEGIN
    
    SET NOCOUNT ON;

    CREATE TABLE #A (Id INT, Name VARCHAR(200), Amount VARCHAR(100), TestColumn INT)
    INSERT INTO #A VALUES
    (1,'ABC','23',1), (2,'CDF','35454',2), (3,'hjhj','9809909',3)

    SELECT * FROM #A

    DROP TABLE #A
  
END
GO

下面是我的查询,它只需要来自源的 3 列

CREATE TABLE #MyTable (Id INT, Name VARCHAR(200), Amount INT)

INSERT INTO #MyTable
EXEC dbo.FirstSP;  

SELECT * FROM #MyTable

DROP TABLE #MyTable

有什么办法可以提供列列表吗?

这就是我正在尝试的,但似乎我不能使用服务器名称作为参数

DECLARE @ServerName VARCHAR(100) = @@SERVERNAME

SELECT * FROM OPENQUERY(@ServerName,'EXEC dbo.FirstSP')

我的全部问题是 select 需要来自 SP 的列。 SP以后可以有很多列。

我会要求开发存储过程的团队创建一个参数“Team”或其他内容,然后稍微更改 sp,以便它 return 基于此参数的预期列。

一个更麻烦的解决方案是使用此存储过程获取由 sp.

编辑的(第一个)结果的列名称。
sp_describe_first_result_set 'dbo.usp_mySp';

然后使用结果创建一些动态 SQL。

试试这个:

/*
    -----------------------------------------------------------------------
    Replace <SERVERNAME>\<INSTANCENAME>], <DATABASENAME> with your names
*/  ------------------------------------------------------------------------

-- First, enable Data Access (One time only)    
EXEC sp_serveroption '<SERVERNAME>\<INSTANCENAME>', 'DATA ACCESS', TRUE;

-- Then SELECT just the fields you need
SELECT  ID, Name, Amount
FROM    OPENQUERY([<SERVERNAME>\<INSTANCENAME>], 'EXEC <DATABASENAME>.dbo.FirstSP')