Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come generare automaticamente colonne e tipi di dati di tabelle temporanee tramite script

questo potrebbe darti un inizio:

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

EDIT:TABELLE TEMP:

le tabelle temporanee sono leggermente diverse, ad esempio funziona in sql 2008 per una tabella temporanea denominata #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

NOTE:questo fornisce un elenco separato da virgole, ma NON ha tentato di rimuovere l'ultima virgola, fornisce solo un elenco, che probabilmente vorresti inserire su una stringa e manipolare, ecc. Quindi utilizzare come sql dinamico o qualcosa. Tuttavia, dovrebbe darti un inizio su ciò che desideri fare.

NOTA per gli altri, sql 2000 non visualizzerebbe correttamente le lunghezze, ad esempio su un varchar(45), elencherebbe semplicemente la parte varchar e non ho tentato di rielaborarla per questa domanda.