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 

これは私が簡単な

EXEC getColumnsTable @tableColumnsNames = N'MyProcTest' 

から

COLUMN_NAME 
idCliente 
idFactura 

を取得したいと思い、私は

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 

を読みたいストアドプロシージャが可能これはあります?私は解決策を見いださなかった。

+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

アンランサーありがとうございますNolan –

+0

しかし、これが表示されます。 メッセージ208、レベル16、状態1、行2 無効なオブジェクト名 'sys.dm_exec_describe_first_result_set'。 –

0

最後に問題を解決しました。exec不完全な

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%'' ' ) 
関連する問題