sql >> Database >  >> RDS >> Sqlserver

Ik moet een weergave maken die alle tabellen samenvoegt op basis van hun voorvoegsel (nieuwe tabellen worden maandelijks toegevoegd)

U kunt deze querybatch gebruiken om de weergave te maken. Maar je moet het blijven updaten.

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);

Dit is een opgeslagen proc die de naam van de basistabel neemt en er een weergave voor maakt (ik heb de bovenstaande code in een proc gestopt die een parameter nodig heeft)

    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. vind vergelijkbare boeken op basis van gekochte boeken op basis van meta-trefwoorden voor boeken

  2. CRON en SQLPLUS

  3. MySQL of PHP voegt een  toe wanneer de £ wordt gebruikt

  4. Aanbevelingen voor prestatieafstemming van MySQL my.cnf