Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Muszę utworzyć widok łączący wszystkie tabele na podstawie ich prefiksu (nowe tabele dodawane co miesiąc)

Możesz użyć tej partii kwerendy, aby utworzyć widok. Ale musisz to aktualizować.

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

To jest przechowywana procedura, która pobiera nazwę tabeli bazowej i tworzy dla niej widok (opakowałem powyższy kod w procedurę, która pobiera parametr)

    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy podczas odczytu rekordów powinienem używać transakcji SQL?

  2. Dane wyjściowe do tabeli tymczasowej w SQL Server 2005

  3. Utwórz tabelę partycjonowaną w SQL Server (T-SQL)

  4. Konkatenacja SQL danych wiersza w kolumnę

  5. Zapytanie porównujące daty w SQL