sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man genererar temporära tabellkolumner och datatyper automatiskt via skript

detta kan ge dig en start:

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 TABELL:

temporära tabeller skiljer sig något, till exempel fungerar detta i sql 2008 för en temptabell som heter #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

ANMÄRKNINGAR:detta ger en kommaseparerad lista, men försökte INTE ta bort det sista kommatecken, det ger bara en lista som du troligen skulle vilja sätta på en sträng och manipulera, etc. och sedan använda som en dynamisk sql eller något. Ändå bör det ge dig en start på vad du vill göra.

OBS för andra, sql 2000 skulle inte visa längderna korrekt, till exempel på en varchar(45), den skulle bara lista varchar-delen och jag försökte inte omarbeta det för den här frågan.



  1. Mysql hur man ställer in tidsdatatypen att endast TT:MM i databasen

  2. Firebird till MySQL-frågemigrering - Välj Inner Join Subquery

  3. Mysql-vallista efter ett specifikt id

  4. Transformerar två dataramar i spark sql