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

Sådan genereres midlertidige tabelkolonner og datatyper automatisk via script

dette kan give 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 TABELLER:

temp-tabeller er lidt forskellige, for eksempel virker dette i sql 2008 for en temp-tabel ved navn #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

BEMÆRK:dette giver en kommasepareret liste, men forsøgte IKKE at fjerne det sidste komma, det giver kun en liste, som du sandsynligvis vil sætte på en streng og manipulere, osv. og derefter bruge som en dynamisk sql eller noget. Alligevel bør det give dig en start på, hvad du ønsker at gøre.

BEMÆRK for andre ville sql 2000 ikke vise længderne korrekt, f.eks. på en varchar(45), den ville bare vise varchar-delen, og jeg forsøgte ikke at omarbejde det til dette spørgsmål.



  1. Opret forbindelse til Oracle uden tnsname.ora

  2. MySQL:Find rækker, der ikke deltager i et forhold

  3. handlingen omdøbning af utl-fil mislykkedes

  4. Syntaksfejl nær ORDER BY order DESC i MySQL