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

Automatycznie generuj typ tabeli zdefiniowany przez użytkownika, który pasuje do istniejącej tabeli

Od czasu do czasu potrzebuję tego samego. Oto mały scenariusz, który ułożyłem. To trochę szorstkie i nie powierzyłbym tego swoim życiem, ale w moim przypadku działa całkiem dobrze. Nie skryptuje kluczy, ale dla mojego scenariusza nie jest to konieczne. Jestem jednak na SQL 2012, więc nie jestem do końca pewien, czy to zadziała tak, jak na SQL 2008. Nie testowałem go dla niektórych bardziej „egzotycznych” typów, takich jak geometry , geography i przyjaciół, ponieważ nigdy nie musiałem ich używać.

declare
    @tablename nvarchar(50)='Users',
    @schemaname nvarchar(50)='dbo',
    @sql nvarchar(max)=N'';

select @sql += N',' + NCHAR(13) + NCHAR(10) + NCHAR(9) + N'[' + c.COLUMN_NAME + N'] [' + DATA_TYPE + N']'
    + case when c.CHARACTER_MAXIMUM_LENGTH is not null then N'(' + case c.CHARACTER_MAXIMUM_LENGTH when -1 then 'max' else cast(c.CHARACTER_MAXIMUM_LENGTH as nvarchar(10)) end + N')' else N'' end
    + case when c.DATA_TYPE = N'numeric' then N'('+CAST(NUMERIC_PRECISION as nvarchar(10))+N', '+CAST(NUMERIC_SCALE as nvarchar(10))+N')' else N'' end
    + case when c.is_nullable <> N'NO' then N' NULL' else N' NOT NULL'end
from INFORMATION_SCHEMA.COLUMNS c
where TABLE_NAME = @tablename AND TABLE_SCHEMA = @schemaname
order by ORDINAL_POSITION;

set @sql = stuff(@sql, 1, 1, N'CREATE TYPE [' + @schemaname + N'].[tab_' + @tablename + N'] AS TABLE(')
    + nchar(13) + nchar(10) + ')' + nchar(13) + nchar(10) + 'GO';
set @sql += nchar(13) + nchar(10) + '--GRANT EXEC ON TYPE::[' + @schemaname + N'].[tab_' + @tablename + N'] TO [User];'
    + nchar(13) + nchar(10) + '--GO';

print @sql
-- If you're happy with the sql, you can pass it to sp_executesql to create your type
-- exec sp_executesql @sql;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pytanie dotyczące projektowania bazy danych - Kategorie / Podkategorie

  2. Scal wiele kolumn w jedną, zachowując podobieństwa i zastępując różnice

  3. Połącz ColdFusion z instancją bazy danych SQL Server

  4. Wykonaj procedurę składowaną SQL i przetwórz wyniki

  5. Jak skopiować bazę danych SQL Azure na mój lokalny serwer programistyczny?