Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Динамичен дизайн на таблица (обща справочна таблица), нужда от хубава заявка, за да получите стойностите

В началото имаме това -- което е доста объркано.

За да изчистя малко, добавям два изгледа и синоним:

create view v_Value as
select
      ID                      as ValueID
    , tb_modules_ID           as ModuleID
    , usertype_OR_religion_ID as RemoteID
from tb_value ;
go

create view v_Religion as
select
      ID
    , ReligionName as Title
from tb_religion ;
go

create synonym v_UserType for tb_UserType ;
go

И сега моделът изглежда така

Сега е по-лесно да напишете заявката

;
with 
q_mod as (
    select
          m.ID                          as ModuleID
        , coalesce(x1.ID    , x2.ID)    as RemoteID
        , coalesce(x1.Title , x2.Title) as Title
        , m.Description                 as ModuleType
    from      tb_Modules as m
    left join v_UserType as x1 on m.TableName = 'tb_UserType'
    left join v_Religion as x2 on m.TableName = 'tb_Religion'
)
select
      a.ModuleID
    , v.ValueID
    , a.RemoteID
    , a.ModuleType
    , a.Title
from q_mod   as a
join v_Value as v on (v.ModuleID = a.ModuleID and v.RemoteID = a.RemoteID) ;

В тази заявка има очевиден модел, така че може да се създаде като динамичен sql, ако трябва да добавите друга таблица от тип модул. Когато добавяте друга таблица, използвайте ID и Title за да избегнете използването на изглед.

РЕДАКТИРАНЕ

За изграждане на динамичен sql (или заявка на ниво приложение)

Променете редове 6 и 7, x-индексът е tb_modules.id

coalesce(x1. , x2. , x3. ..) 

Добавете линии към лявото съединение (под ред 11)

left join v_SomeName as x3  on m.TableName = 'tb_SomeName'

SomeName е tb_modules.description и x-index съответства на tb_modules.id

РЕДАКТИРАНЕ 2

Най-простият вероятно би бил да опаковате горната заявка в изглед и след това всеки път, когато схемата се промени динамично да създадете и изпълните ALTER VIEW . По този начин заявката няма да се промени от точката на приложението.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да възстановя база данни от MDF в SQL Server 2005?

  2. Вмъкване в... Обединяване... Изберете (SQL сървър)

  3. Добавяне на колона към всички потребителски таблици в t-sql

  4. 5 предимства на проактивното наблюдение на ефективността на базата данни

  5. създаване на външен ключ без първичен ключ