Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Secara otomatis menghasilkan tipe tabel yang ditentukan pengguna yang cocok dengan tabel yang ada

Saya membutuhkan hal yang sama dari waktu ke waktu. Berikut skrip kecil yang saya buat. Ini agak kasar dan saya tidak akan mempercayainya dengan hidup saya, tetapi itu bekerja dengan cukup baik untuk kasus saya. Itu bukan kunci skrip, tetapi untuk skenario saya itu tidak perlu. Saya menggunakan SQL 2012, jadi saya tidak sepenuhnya yakin ini akan berfungsi seperti pada SQL 2008. Saya tidak mengujinya untuk beberapa tipe yang lebih 'eksotis' seperti geometry , geography dan teman-teman, karena saya tidak pernah perlu menggunakannya.

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. Hapus ASCII Extended Characters 128 dan seterusnya (SQL)

  2. Panduan untuk CTE di SQL Server

  3. Hitung Hash atau Checksum untuk tabel di SQL Server

  4. Dapatkan Jumlah Upaya Login yang Gagal untuk Login karena Kata Sandi yang Salah di SQL Server (T-SQL)

  5. Apa yang harus dilakukan dari tipe tunggu ASYNC NETWORK IO?