sql >> Databáze >  >> RDS >> Sqlserver

Jak automaticky generovat sloupce a datové typy dočasné tabulky pomocí skriptu

toto by vám mohlo dát začátek:

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:TEMP TABULKY:

dočasné tabulky se mírně liší, například to funguje v SQL 2008 pro dočasnou tabulku s názvem #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

POZNÁMKY:toto poskytuje seznam oddělený čárkami, ale NEPOKOUŠIL SE tuto poslední čárku odstranit, poskytuje pouze seznam, který byste pravděpodobně chtěli umístit na řetězec a manipulovat s ním atd. a poté jej použít jako dynamický sql nebo somthing. Přesto by vám to mělo dát začátek toho, co chcete dělat.

POZNÁMKA pro ostatní, sql 2000 by nezobrazovalo správně délky například na varchar(45), pouze by vypsalo varchar část a nepokoušel jsem se to přepracovat pro tuto otázku.



  1. Jak dále optimalizovat tuto tabulku MySQL pro jeden dotaz

  2. výjimka zlomeného potrubí s MySql v aplikaci Grails

  3. Dynamické dělení MySQL založené na UnixTime

  4. Seskupit podle rozsahu X dní