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')
我在其他数据库中有一个由其他团队维护的存储过程。假设它当前返回 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')