Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So generieren Sie temporäre Tabellenspalten und Datentypen automatisch per Skript

dies könnte Ihnen einen Anfang geben:

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

BEARBEITEN:TEMP-TABELLEN:

Temporäre Tabellen sind etwas anders, zum Beispiel funktioniert dies in SQL 2008 für eine temporäre Tabelle namens #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

ANMERKUNGEN:Dies gibt eine durch Kommas getrennte Liste, aber es wurde NICHT versucht, das letzte Komma zu entfernen, es gibt nur eine Liste, die Sie wahrscheinlich in eine Zeichenfolge einfügen und manipulieren möchten usw. und dann als dynamisches SQL oder so etwas verwenden möchten. Trotzdem sollte es Ihnen einen Anfang geben, was Sie tun möchten.

HINWEIS für andere, SQL 2000 würde die Längen beispielsweise auf einem varchar (45) nicht richtig anzeigen, es würde nur den varchar-Teil auflisten, und ich habe nicht versucht, das für diese Frage zu überarbeiten.