web-dev-qa-db-fra.com

Obtenir la structure de la table temporaire (comme générer un script sql) et effacer la table temporaire pour l'instance actuelle

Comment puis-je obtenir la structure de la table temporaire puis supprimer la table temporaire. Existe-t-il un sp_helptext pour les tables temporaires? Enfin, est-il possible de supprimer ensuite la table temporaire dans la même session ou fenêtre de requête?

Exemple:

select *
into #myTempTable  -- creates a new temp table
from tMyTable  -- some table in your database

tempdb..sp_help #myTempTable

Référence .

55
RetroCoder

Vous devez utiliser des guillemets autour du nom de la table temporaire et vous pouvez supprimer la table temporaire directement après avoir utilisé drop table ....

select *
into #myTempTable  -- creates a new temp table
from tMyTable  -- some table in your database

exec tempdb..sp_help '#myTempTable'

drop table #myTempTable
103
Mikael Eriksson

Tant que je sais qu'il n'y a pas de SP_HelpText pour les tables. Essaye ça:

Select * From tempdb.sys.columns Where object_id=OBJECT_ID('tempdb.dbo.#myTempTable');
10
Geri Reshef

J'avais besoin de pouvoir recréer une table temporaire dans un script, j'ai donc utilisé ce code pour générer la partie colonnes de l'instruction CREATE TABLE:

SELECT char(9) + '[' + c.column_name + '] ' + c.data_type 
   + CASE WHEN c.data_type IN ('decimal')
      THEN isnull('(' + convert(varchar, c.numeric_precision) + ', ' + convert(varchar, c.numeric_scale) + ')', '') 
      ELSE '' END
   + CASE WHEN c.IS_NULLABLE = 'YES' THEN ' NULL' ELSE '' END
   + ','
From tempdb.INFORMATION_SCHEMA.COLUMNS c 
WHERE TABLE_NAME LIKE '#myTempTable%' 

Je n'ai pas testé tous les types de données SQL, mais cela a fonctionné pour int, float, datetime, money et bit.

Aussi - ApexSQL Complete (gratuit) a une fonctionnalité intéressante où vous pouvez exporter les résultats de la grille dans un Insert Into déclaration. Je l'ai utilisé pour charger cette table temporaire créée dans mon script. ApexSQL Copy Results As Insert into statement

9
dajo

exec sp_columns nom_table;

exemple

les employés de exec sp_columns;

3
Ravi Kumar
Select * From tempdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '#yourtemp%'
2
flyreaver

Donc, cela m'a aidé. Il a créé les colonnes Table.

Select Column_Name + ' [' + DATA_TYPE + ']' + 
case when Data_Type in ('numeric', 'varchar', 'char')
    then '(' +
        case
            when DATA_TYPE = 'numeric' then CAST(numeric_precision as varchar(3)) + ',' + CAST(numeric_scale as varchar(3))
            when DATA_TYPE = 'varchar' then CAST(CHARACTER_MAXIMUM_LENGTH as varchar(3))
            when DATA_TYPE = 'char' then CAST(CHARACTER_MAXIMUM_LENGTH as varchar(3))
        end
         + ')'
    else ''
end
+ ','
, * 
From tempdb.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME LIKE '#MEHTEMPTABLE%'

Il ne me restait plus qu'à copier ces éléments dans une déclaration de table

Declare @MyTable Table
(
--All columns here
)

Cela aurait résolu mon problème, mais j'étais pressé par le temps

0
Gawie Greef