0

我有问题需要知道任何存储过程的列作为参数传递给另一个存储过程。但无论如何我没有得到任何结果。确定动态存储过程的列。 SQL Server

ALTER PROCEDURE getColumnsTable 
    (@tableColumnsNames nvarchar(45)) 
AS 
BEGIN 
    DECLARE @TSQL varchar(100) 

    SET @TSQL = 'select * into #TablaTemporal FROM OPENQUERY(MyServerConnection, ''EXEC '+ @tableColumnsNames +''');' 

    EXEC (@TSQL) 

    SELECT COLUMN_NAME 
    FROM tempdb.INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME like '%#TablaTemporal%' 

    IF EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME like '%#TablaTemporal%') 
    BEGIN 
     DROP TABLE #TablaTemporal 
    END 
END 

这是存储过程我想读

ALTER PROCEDURE MyProcTest 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
     c.idCliente, f.idFactura 
    FROM 
     Cliente c 
    INNER JOIN 
     Factura f ON (c.idCliente = f.idCliente)    
    WHERE 
     1 = 2 
END 

我想从一个简单的

EXEC getColumnsTable @tableColumnsNames = N'MyProcTest' 

获得

COLUMN_NAME 
idCliente 
idFactura 

这是可能的?我还没有找到解决方案。

+0

波恩使用http://es.stackoverflow.com/ si quiere usar espanol。 –

+0

英文!!谢谢!! –

回答

0

的SQL Server 2008: CAS尝试这样的:

USE dbtest 
    GO 
    IF OBJECT_ID('sp_test') IS NOT NULL DROP PROCEDURE sp_test 
    GO 
    CREATE PROCEDURE sp_test 
    AS 
    BEGIN 

     SET NOCOUNT ON; 
     SELECT 1 AS col1, 'string' AS col2 
    END 
    GO 

    IF OBJECT_ID('tempdb..#tt') IS NOT NULL DROP TABLE #tt 
    SELECT * INTO #tt FROM OPENROWSET('SQLNCLI', 'server=(local);trusted_connection=yes', 'exec dbtest.dbo.sp_test') WHERE 1!=1 
    exec tempdb..sp_columns '#tt' 

SQL 2012和高达: 可以使用DMV sys.dm_exec_describe_first_result_set_for_object

例子:

SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('sp_who'), 0) ; 
 
is_hidden column_ordinal name                                is_nullable system_type_id system_type_name 
--------- -------------- -------------------------------------------------------------------------------------------------------------------------------- ----------- -------------- -------------------------------------------------------------------------------------------------------------------------------- 
0   1    spid                                0   52    smallint 
0   2    ecid                                0   52    smallint 
0   3    status                               0   239   nchar(30) 
0   4    loginame                               1   231   nvarchar(128) 
0   5    hostname                               0   239   nchar(128) 
0   6    blk                                1   175   char(5) 
0   7    dbname                               1   231   nvarchar(128) 
0   8    cmd                                0   239   nchar(16) 
0   9    request_id                              0   56    int 
+0

此DMV可用于SQL Server ** 2012 **和更新版本。 –

+0

感谢您的anwser Nolan –

+0

但出现: 消息208,级别16,状态1,行2 无效的对象名称'sys.dm_exec_describe_first_result_set'。 –

0

最后y解决了问题,执行它一个不完整

DECLARE @sqlCompuesta varchar(MAX) 
SET @sqlCompuesta='select c.idCliente,f.idFactura '+ 
         'from Cliente c inner join Factura f on (c.idCliente=f.idCliente) '+ 
         'where 1=1 ' 


EXEC ( 'SELECT * into #temp1 FROM OpenQuery(MyServerConnection, '''[email protected]+'''  ) ' + 
     'SELECT * FROM tempdb.INFORMATION_SCHEMA.COLUMNS '+ 
     'WHERE TABLE_NAME like ''%#temp1%'' ' )