0

Ich habe das Problem, dass ich die Spalten jeder gespeicherten Prozedur kennen muss, die als Parameter in einem anderen übergeben wird. Aber auf jeden Fall bekomme ich keine Ergebnisse.Ermitteln Sie die Spalten einer dynamischen gespeicherten Prozedur. 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 

Dies ist die gespeicherte Prozedur würde ich

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 

ich

COLUMN_NAME 
idCliente 
idFactura 

von einem einfachen

EXEC getColumnsTable @tableColumnsNames = N'MyProcTest' 

erhalten möchte gerne lesen Ist das möglich ? Ich habe die Lösung nicht gefunden.

+0

Por bevorzugen Verwendung http://es.stackoverflow.com/ si quiere usar espanol. –

+0

In Englisch !! Vielen Dank!! –

Antwort

0

SQL Server 2008: cas Sie versuchen, wie folgt aus:

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 und bis: Sie können DMV verwenden sys.dm_exec_describe_first_result_set_for_object

Beispiel:

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

Dieser DMV ist nur für SQL Server ** 2012 ** und neuer verfügbar. –

+0

Vielen Dank für Ihren anwser Nolan –

+0

Es erscheint jedoch: Msg 208, Ebene 16, Status 1, Zeile 2 Ungültiger Objektname 'sys.dm_exec_describe_first_result_set'. –

0

Endlich y Gelöst das Problem, die exec ist a Unvollständig

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%'' ' ) 
Verwandte Themen