Sqlserver
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ако записът съществува, актуализирайте друго вмъкване

  2. Как да изпълним sp_send_dbmail, като ограничим разрешенията

  3. Закръгляване надолу DECIMAL(14,3) до третата десетична цифра в SQL 2008

  4. Как да имитирате материализирани изгледи на Oracle на MS SQL Server?

  5. SQL Server заявка за намиране на всички текущи имена на база данни