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. डेटाबेस को कॉपी करने का सबसे अच्छा तरीका क्या है?

  2. मैं SQL डेटाबेस के लिए सभी अनुदान कैसे देख सकता हूँ?

  3. SQL सर्वर में अद्वितीय बाधा क्या है - SQL सर्वर / TSQL ट्यूटोरियल भाग 95

  4. इनर जॉइनिंग थ्री टेबल

  5. एक इकाई फ्रेमवर्क मॉडल बनाना कई डेटाबेस फैलाता है