sql >> Database teknologi >  >> RDS >> Sqlserver

Generer automatisk en brugerdefineret tabeltype, der matcher en eksisterende tabel

Jeg har brug for det samme fra tid til anden. Her er et lille script, jeg har sammensat. Det er lidt groft, og jeg ville ikke stole på det med mit liv, men det fungerer rimeligt godt for mit tilfælde. Det scripter ikke nøgler, men for mit scenarie er det ikke nødvendigt. Jeg er dog på SQL 2012, så jeg er ikke helt sikker på, at dette vil fungere, som det er på SQL 2008. Jeg testede det ikke for nogle af de mere 'eksotiske' typer som geometry , geography og venner, da jeg aldrig behøvede at bruge dem.

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. MySQL Trigger til at indsætte data i forskellige DB

  2. Hvordan kontrollerer man, om der findes en database og tabeller i sql-serveren i et vb .net-projekt?

  3. PHP PDO undslipper spørgsmålstegn, så den tror ikke, det er en pladsholder

  4. Angivelse af flere en-til-mange-relationer mellem tabeller i Hibernate