Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment générer automatiquement des colonnes de table temporaire et des types de données via un script

cela pourrait vous donner un début :

DECLARE @viewname VARCHAR(50);
SET @viewname ='tableorviewname';
SELECT  c.name + ' '+ t.name + 
case t.name  
WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
ELSE ',' 
end
FROM sys.columns c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE object_id = (SELECT object_id from sys.objects where name = @viewname)
ORDER BY c.column_id

MODIFIER :TABLES TEMPORAIRES :

les tables temporaires sont légèrement différentes, par exemple cela fonctionne dans sql 2008 pour une table temporaire nommée #tv_source

DECLARE @viewortablename VARCHAR(50);
SET @viewortablename ='tempdb..#tv_source';
SELECT  c.name + ' '+ t.name + 
case t.name  
WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
ELSE ',' 
end
FROM tempdb.sys.columns c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE object_id =  object_id(@viewortablename)
ORDER BY c.column_id

REMARQUES:cela donne une liste séparée par des virgules, mais n'a PAS tenté de supprimer cette dernière virgule, cela ne donne qu'une liste, que vous voudriez probablement mettre sur une chaîne et manipuler, etc., puis utiliser comme sql dynamique ou quelque chose. Néanmoins, cela devrait vous donner un début sur ce que vous souhaitez faire.

REMARQUE pour les autres, sql 2000 n'afficherait pas correctement les longueurs par exemple sur un varchar(45), il listerait simplement la partie varchar et je n'ai pas tenté de retravailler cela pour cette question.