Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да генерирате временни колони и типове данни автоматично чрез скрипт

това може да ви даде начало:

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

РЕДАКТИРАНЕ:ВРЕМЕННИ ТАБЛИЦИ:

временните таблици са малко по-различни, например това работи в sql 2008 за временна таблица с име #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

ЗАБЕЛЕЖКИ:това дава списък, разделен със запетая, но НЕ се опита да премахне тази последна запетая, дава само списък, който вероятно бихте искали да поставите на низ и да манипулирате и т.н., след което да използвате като динамичен sql или нещо подобно. Все пак трябва да ви даде начало на това, което искате да направите.

ЗАБЕЛЕЖКА за другите, sql 2000 няма да покаже правилно дължините, например на varchar(45), той просто ще посочи частта varchar и аз не се опитах да преработя това за този въпрос.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запазване на връзките родител-дете при копиране на йерархични данни

  2. Извикване на съхранена процедура с върната стойност

  3. SQL Server 2008 R2 - острови и пропуски

  4. Намиране на следващия ред в SQL заявката и изтриването му само ако предходният ред съвпада

  5. Бързо вмъкване на релационни (нормализирани) таблици с данни в база данни на SQL Server 2008