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

プレフィックスに基づいてすべてのテーブルを結合するビューを作成する必要があります (新しいテーブルが毎月追加されます)

    このクエリ バッチを使用して、ビューを作成できます。ただし、更新し続ける必要があります。

    declare @v nvarchar(max) =
        (
            select stuff((
            select cast(' union all select * from ' as nvarchar(max)) + quotename(name)
              from sys.tables
             where name like 'SOME\_TABLE\____\_[0-9][0-9][0-9][0-9][a-Z][a-Z][a-Z]' escape '\'
               for xml path('a'), type
            ).value('.','nvarchar(max)'),1,11,'')
        );
    set @v = 'CREATE VIEW SOME_TABLE AS ' + @v;
    exec (@v);
    

    これは、ベース テーブル名を受け取り、そのビューを作成するストアド プロシージャです (上記のコードを、パラメーターを受け取るプロシージャにラップしました)。

        SET ANSI_NULLS ON
        GO
        SET QUOTED_IDENTIFIER ON
        GO
        CREATE PROCEDURE spCreateUnionedView
            @BaseTableName varchar(100)
        AS
        BEGIN
            SET NOCOUNT ON;
    
            declare @v nvarchar(max) =
            (
                select stuff((
                select cast(' union all select * from ' as nvarchar(max)) + quotename(name)
                  from sys.tables
                 where name like replace(@BaseTableName, '_', '\_') + '\____\_[0-9][0-9][0-9][0-9][a-Z][a-Z][a-Z]' escape '\'
                   for xml path('a'), type
                ).value('.','nvarchar(max)'),1,11,'')
            );
    
            declare @s nvarchar(max) = 'DROP VIEW ' + @BaseTableName;
            exec (@s);
    
            set @v = 'CREATE VIEW ' + @BaseTableName + ' AS ' + @v;
            exec (@v);
    
        END
        GO
    



    1. ローカルホストに接続できませんが、SQLServer2008ではコンピューター名を使用できます

    2. MySQLでのPostgreSQLのarray_agg()およびarray_to_string

    3. 削除されたmysqlデータベースの復元

    4. SQLServerのINSERTINTOSELECTクエリでの重複を避けてください