sql >> データベース >  >> RDS >> Sqlserver

既存のテーブルと一致するユーザー定義のテーブル タイプを自動的に生成する

    私は時々同じことが必要です。ここに私がまとめた小さなスクリプトがあります。それは少しラフで、私の人生でそれを信頼することはできませんが、私の場合はかなりうまくいきます.キーはスクリプト化されませんが、私のシナリオでは必要ありません。ただし、私は SQL 2012 を使用しているため、これが SQL 2008 でそのまま機能するかどうかは完全にはわかりません。 、地理 私はそれらを使用する必要がなかったので.

    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. nvarchar(max)とNText

    2. チェックボックスの条件が変更されたときにajaxを使用してmysqldbを更新するにはどうすればよいですか?

    3. ルーチン...のストアドプロシージャエラー引数1は、BEFOREトリガーの変数またはNEW疑似変数ではありません

    4. 現在のビューのAPPL_TOPスナップショットとは