2010-03-19 7 views
3

Est-ce que quelqu'un sait comment créer une définition de table à partir d'un ensemble de résultats de procédure stockée?Définition de table SQL Server à partir du jeu de résultats de procédure stockée

J'ai une procédure stockée qui produit un ensemble de résultats avec plus de 30 colonnes, je voudrais obtenir cela dans une table sans avoir à créer manuellement toutes les colonnes de la table.

Y a-t-il une procédure intégrée qui videra les noms de colonnes et les types ..?

Merci.

+0

Pas que je sois conscient de. Pourquoi voudriez-vous? – CResults

+0

Pour éviter d'avoir à créer manuellement la table, j'essaie juste de gagner du temps vraiment ... J'ai eu des problèmes dans le passé en utilisant 'INSERT EXEC' où les colonnes retournées dans la procédure stockée ne correspondent pas exactement de la table. Cela peut être une vraie douleur quand ces procédures renvoient autant de colonnes. – SuperBrook

Répondre

0

Vous « peut » le faire, mais je n » sais pas si je le recommande:

EXEC sp_configure 'Show Advanced Options', 1 
GO 
RECONFIGURE 
GO 
EXEC sp_configure 'Ad Hoc Distributed Queries', 1 
GO 
RECONFIGURE 
GO 

SELECT 
    * 
INTO 
    #table 
FROM 
    OPENROWSET(
    'SQLNCLI', 
    'SERVER=.;Trusted_Connection=yes', 
    'EXEC StoredProcedureName' 
) 
0

Si c'est une chose unique, vous pouvez essayer ceci (pas en production!).

Je passe d'habitude à la procédure enfant et à la requête qui renvoie l'ensemble de résultats, ajoutez INTO YourNewTable entre la liste de sélection de colonne et le FROM. Exécutez la procédure enfant 1 fois, puis supprimez la modification.

Vous pouvez ensuite aller voir les colonnes de jeu de résultats en regardant YourNewTable dans SQL Server Management Studio, ou une table requête de méta-données comme:

SELECT 
    * 
    FROM INFORMATION_SCHEMA.Columns 
    WHERE TABLE_NAME='YourNewTable' 
    ORDER BY ORDINAL_POSITION 
0

dans votre procédure stockée, vous devrez effectuer un « SELECT INTO » avec un « 1 = 0 » il crée juste une table vide.

Si vous souhaitez définir les types de données: convertir ou jeter votre colonne dans ce type de données

si vous voulez une contrainte NOT NULL, vous devez utiliser dans la sélection: isnull (yourcolumn, '123 ') comme yourcolumn et ensuite dans la clause WHERE where yourcolumn <>' 123 '

Questions connexes