sql >> Database >  >> RDS >> Sqlserver

Hoe u tijdelijke tabelkolommen en gegevenstypen automatisch via script kunt genereren

dit kan je een begin geven:

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

tijdelijke tabellen zijn iets anders, dit werkt bijvoorbeeld in sql 2008 voor een tijdelijke tabel met de naam #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

OPMERKINGEN:dit geeft een door komma's gescheiden lijst, maar er is GEEN poging gedaan om die laatste komma te verwijderen, het geeft alleen een lijst, die u waarschijnlijk aan een string wilt toevoegen en manipuleren, enz. en die u vervolgens als een dynamische sql of iets dergelijks wilt gebruiken. Toch zou het u een begin moeten geven met wat u wilt doen.

OPMERKING voor anderen zou sql 2000 de lengtes niet correct weergeven, bijvoorbeeld op een varchar(45), het zou alleen het varchar-gedeelte vermelden en ik heb niet geprobeerd om dat voor deze vraag te herwerken.



  1. StarJoinInfo in uitvoeringsplannen

  2. Tekenen dat uw database niet langer voor u werkt

  3. Kan geen waarden (NULL) gebruiken in python mysql.connector in voorbereide INSERT-instructie

  4. Dynamische SQL met behulp van configuratietabellen