Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak automatycznie generować kolumny tabeli tymczasowej i typy danych za pomocą skryptu?

to może dać ci począ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

EDYCJA:TABELE TEMP:

Tabele tymczasowe są nieco inne, na przykład działa to w sql 2008 dla tabeli tymczasowej o nazwie #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

UWAGI:to daje listę oddzieloną przecinkami, ale NIE próbowało usunąć tego ostatniego przecinka, daje tylko listę, którą prawdopodobnie chciałbyś umieścić w łańcuchu i manipulować itp., a następnie użyć jako dynamicznego sql lub czegoś. Mimo to powinno dać ci początek tego, co chcesz zrobić.

UWAGA dla innych, sql 2000 nie wyświetlałoby prawidłowo długości, na przykład na varchar(45), po prostu wyświetlałby część varchar i nie próbowałem przerabiać tego dla tego pytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje różnica w wydajności między CTE , podzapytaniem, tabelą tymczasową lub zmienną tabelową?

  2. sp_executesql powoduje, że moje zapytanie jest bardzo powolne

  3. Jak oczyścić dane wejściowe za pomocą PHP i sterownika sqlsrv?

  4. Połącz wartości na podstawie ID

  5. Wdrażanie LocalDB na komputerze klienckim