SQL Q Server 2000 Admin Creating and Managing Views Stored Procedures Triggers User Defined Functions z z z z ﻣﻘﺪﻣﺔ ﺡ ﻭﺍﻟﻘﻮﺍﺩﺡ { ﺍﳌﻨﺎﻇﲑ ﻭﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰﻧﺔ ﻭﺗﻮﺍﺑﻊ ﺍﳌﺴﺘﺨﺪﻡ ﻫﻲ ﺃﺃﻏﺮﺍﺽ Objects ﺗﻘﺪﻣﻬﺎ ﻟﻐﺔ Transact-SQLﻟﺮﻓﻊ ﻣﺴﺘﻮﻯ ﺃﺩﺍﺀ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ ﻭﺗﺒﺴﻴﻂ ﻣﻬﺎﻡ ﺍﻟﺘﻄﻮﻳﺮ ﺽ ﰲ ﻗﺎﻋﺪﺓ ﺍﻷﻏﺮﺍﺽ ﻴﻊ ﻫﺬﻩ ﺮ ُﺨﺰﻥ ﲨﻴﻊ {ﺗ ﺰ ﺍﳌﻌﻄﻴﺎﺕ { ﳝﻜﻦ ﺇﻧﺸﺎﺀﻫﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ SQL Query Analyzerﺃﻭ Enterprise Manager 1 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﳌﻨﺎﻇﲑ Views { ﻳُﻌﺮﻑ ﺍﳌﻨﻈﺎﺭ ﻋﻠﻰ ﺃﻧﻪ ﺍﺳﺘﻌﻼﻡ ﻣُﺨﺰّﻥ ﻛﻐﺮﺽ ﰲ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ { ﳝﻜﻦ ﻭﺻﻒ ﺍﳌﻨﻈﺎﺭ ﺑﺄﻧﻪ ﺟﺪﻭﻝ ﺍﻓﺘﺮﺍﺿﻲ ،ﻭﺫﻟﻚ ﻟﻠﺘﺸﺎﺑﻪ ﺍﻟﻜﺒﲑ ﺑﻴﻨﻪ ﻭﺑﲔ ﺍﳉﺪﺍﻭﻝ ﻣﻦ ﺣﻴﺚ ﺍﻷﺩﺍﺀ ،ﻟﺬﻟﻚ ،ﻏﺎﻟﺒﹰﺎ ﻣﺎ ﻳُﺸﺎﺭ ﻟﻠﻤﻨﺎﻇﲑ ﰲ ﻋﺒﺎﺭﺍﺕ T-SQLﻋﻠﻰ ﺃﻬﻧﺎ ﺟﺪﺍﻭﻝ ﻣﻊ ﺑﻌﺾ ﺍﻻﺳﺘﺜﻨﺎﺀﺍﺕ { ﺗُﺴﺘﺨﺪﻡ ﺍﳌﻨﺎﻇﲑ ﻟﻌﺮﺽ ﳎﻤﻮﻋﺔ ﺟﺰﺋﻴﺔ ﻣﻦ ﺍﳌﻌﻄﻴﺎﺕ ،ﺃﻭ ﺑﺸﻜﻞ ﺃﺩﻕّ ،ﻟﻌﺮﺽ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻷﺳﻄﺮ ﺃﻭ ﺍﻷﻋﻤﺪﺓ ﺳﻮﺍﺀ ﻛﺎﻧﺖ ﻣﻦ ﺍﻟﺒﻌﺾ ﻣﻦ ﺑﻌﻀﻬﺎﺎ ﺍﻟ ﺾ ﻂ ﻣﻊ ﻀ ﺗﺮﺗﺒﻂ ﺟﺪﺍﻭﻝﻝ ﺗ ﺗ ﻋﺪﺓّﺓ ﺪﺍ ﺟﺪﻭﻝﻝ ﻣﻌﲔ ﺃﺃﻭ ﻣﻦ ﺪ ﺪ ﺧﻼﻝ ﻋﺒﺎﺭﺍﺕ JOINﺃﻭ UNION { ﺑﺎﺳﺘﺜﻨﺎﺀ ﺍﳌﻨﺎﻇﲑ ﺍﳌﻔﻬﺮﺳﺔ ،ﻻ ﺗﺸﻜﻞ ﺍﳌﻨﺎﻇﲑ ﺍﻓﺘﺮﺍﺿﻴﹰﺎ ﻋﺒﺌﹰﺎ ﺇﺿﺎﻓﻴﹰﺎ ﻋﻠﻰ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ ،ﻭﺫﻟﻚ ﻷﻬﻧﺎ ﻻ ﲣﺰّﻥ ﳏﺘﻮﻳﺎﻬﺗﺎ ﻣﻦ ﺍﳌﻌﻄﻴﺎﺕ ﺑﺸﻜﻞ ﻓﻌﻠﻲ ﺍﳌﻨﺎﻇﲑ ﻣﻨﺎﻇﻴﺮ ﻣﻦ ﺝﺪول واﺣﺪ ﻣﻨﻈﺎر ﻣﺘﻌﺪد اﻟﺠﺪاول 2 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﳌﻨﺎﻇﲑ ﺗﺒﺴﻴﻂ ﻋﻤﻠﻴﺎﺕ ﺍﺳﺘﺮﺟﺎﻉ ﺍﳌﻌﻄﻴﺎﺕ ﰲ ﺍﻻﺳﺘﻌﻼﻣﺎﺕ ﺍﳌﻌﻘﹼﺪﺓ { ﻛﺜﲑﹰﺍ ﻣﺎ ﺗُﺴﺘﺨﺪﻡ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺪﻣﺞ ﺍﳌﻌﻘﺪﺓ ﺃﻭ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﺘﺠﻤﻴﻌﻴﺔ ﺃﻭ ﺗﻮﺍﺑﻊ SQLﺍﳌﹸﻀﻤّﻨﺔ ﺃﻭ ﻏﲑﻫﺎ ،ﰲ ﻋﻤﻠﻴﺎﺕ ﺍﺳﺘﻌﻼﻡ ﺍﳌﻌﻄﻴﺎﺕ، ﻭﺇﻥ ﺗﻜﺮﺍﺭ ﻭﺗﻮﺍﺗﺮ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﳌﻌﻄﻴﺎﺕ ﻗﺪ ﻳﺆﺩﻱ ﺇﱃ ﺯﻳﺎﺩﺓ ﺗﻌﻘﻴﺪ ﺍﻻﺳﺘﻌﻼﻣﺎﺕ ﻣﻊ ﻣﺮﻭﺭ ﺍﻟﻮﻗﺖ { ﳝﻜﻨﻨﺎ ﻣﻦ ﺧﻼﻝ ﺍﳌﻨﺎﻇﲑ ﺃﻥ ﻧﻘﻮﻡ ﺑﺈﺧﻔﺎﺀ ﺍﻟﺘﻌﻘﻴﺪ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺗﻠﻚ ﺍﻻﺳﺘﻌﻼﻣﺎﺕ ﻣﻦ ﺧﻼﻝ ﲣﺰﻳﻨﻬﺎ ﰲ ﻣﻨﻈﺎﺭ ﻣﻨﺎﺳﺐ ﰒ ﺍﺳﺘﻌﻼﻡ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﺫﻟﻚ ﺍﳌﻨﻈﺎﺭ ﻣﺒﺎﺷﺮﺓ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﳌﻨﺎﻇﲑ ﲣﺒﺌﺔ ﺑﻨﻴﺔ ﺍﳉﺪﺍﻭﻝ ﺍﻟﻔﻌﻠﻴﺔ، ﻭﺍﳉﺪﺍﻭﻝ ﺍﻟﻔ ﻠ ﺔ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﳉ ﺍ ﻝ ﻣﺎ ﺑﲔ ﺍﻟ ﻄ ﻘﺎ ﻭﺳﻴﻄﺔ ﺎ ﻃﺒﻘﺔ ﻄﺔ ﻋﺒﺎﺭﺓ ﻋﻦ ﻃ ﻘﺔ ﻟﺘﻜﻮﻥ ﺎ ﺓ ﺍﳌﻨﺎﻇﲑ ﻟ ﻜ ﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﳌ ﺎﻇ ﺍ ﳝﻜﻦ ﺍ { ﻜ ﻣﺎ ﻳﺴﻤﺢ ﺑﺎﻟﺘﺤﻜﻢ ﺑﺎﻟﻮﻟﻮﺝ ﺇﱃ ﺍﳌﻌﻄﻴﺎﺕ ﻛﻤﺎ ﻳﺴﻤﺢ ﺑﻌﺰﻝ ﺍﳌﺴﺘﺨﺪﻣﲔ ﻋﻦ ﺍﻟﺘﻐﲑﺍﺕ ﺍﻟﱵ ﺗﻄﺮﺃ ﻋﻠﻰ ﺍﳉﺪﺍﻭﻝ { ﻓﻌﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﻟﻨﻔﺘﺮﺽ ﺃﻥ ﺃﺣﺪ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﻳﻘﻮﻡ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﻌﻄﻴﺎﺕ ﺟﺪﻭﻝ ﻣﻌﲔ .ﺇﻥ ﺃﻱ ﺗﻐﻴﲑ ﻣﺴﺘﻘﺒﻠﻲ ﻋﻠﻰ ﺍﳉﺪﻭﻝ ﺳﻴﺆﺩﻱ ﺑﺎﻟﻀﺮﻭﺭﺓ ﺇﱃ ﺗﻌﺪﻳﻞ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺬﻱ ﻳﺴﺘﻌﻠﻢ ﺫﻟﻚ ﺍﳉﺪﻭﻝ ﻟﻜﻲ ﻳﻮﺍﻓﻖ ﺍﻟﺘﻐﲑﺍﺕ ﺍﳉﺪﻳﺪﺓ .ﺃﻣﺎ ﰲ ﺣﺎﻝ ﺍﺳﺘﺨﺪﺍﻡ ﻣﻨﻈﺎﺭ ﻛﻄﺒﻘﺔ ﻭﺳﻴﻄﺔ ﺑﲔ ﺍﻟﺘﻄﺒﻴﻖ ﻭﺍﳉﺪﻭﻝ ،ﻓﺈﻧﻪ ﻟﻴﺲ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺇﺟﺮﺍﺀ ﺃﻱ ﺗﻌﺪﻳﻞ ﻋﻠﻰ ﺍﻟﺘﻄﺒﻴﻖ ،ﺇﺫ ﺃﻧﻪ ﻳﻜﻔﻲ ﺍﳌﻌﻄﻴﺎﺕ ُﻌﻴﺪ ﻴ ﺒﻴﻖ .ﻓﻤﺎﺩﺍﻡﻡ ﺍﳌﻨﻈﺎﺭﺭ ﻳ ﻴ ﳛﺘﺎﺟﻬﺎ ﺫﻟﻚ ﺍﻟﺘﻄﺒﻴﻖ ﻬ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﱵ ﱵ ﺐ ﻴ ﻳﻞ ﺍﳌﻨﻈﺎﺭﺭ ﻴﻟﻴﺠﻠﺐ ﺗﻌﺪﻳﻞ ﺍﳌﻨﺎﺳﺒﺔ ،ﺑﺎﻟﺘﺎﱄ ﻻ ﻳﻮﺟﺪ ﺃﻱ ﺍﺭﺗﺒﺎﻁ ﻣﺒﺎﺷﺮ ﺑﲔ ﺍﻟﺘﻄﺒﻴﻖ ﻭﺟﺪﺍﻭﻝ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ { ﺗﱪﺯ ﻛﺬﻟﻚ ﺍﻟﻔﺎﺋﺪﺓ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﳌﻨﺎﻇﲑ ﰲ ﺍﳉﺪﺍﻭﻝ ﺍﺠﻤﻟﺰﺃﺓ ،ﻓﻔﻲ ﺑﻌﺾ ﺃﻧﻮﺍﻉ ﻗﻮﺍﻋﺪ ﺍﳌﻌﻄﻴﺎﺕ ﻳﺘﻢ ﲡﺰﺋﺔ ﺍﳉﺪﺍﻭﻝ ﺍﻟﱵ ﻳﺰﺩﺍﺩ ﺣﺠﻤﻬﺎ ﺑﺸﻜﻞ ﻛﺒﲑ ﺟﺪﹰﺍ ﺇﱃ ﻋﺪّﺓ ﺃﻗﺴﺎﻡ ﻣﻦ ﺃﺟﻞ ﲢﺴﲔ ﺍﻷﺩﺍﺀ ،ﲝﻴﺚ ﻳﺘﻢ -ﺃﺛﻨﺎﺀ ﺑﻨﺎﺀ ﺍﻻﺳﺘﻌﻼﻡ -ﲢﺪﻳﺪ ﺃﻱ ﺟﺰﺀ ﻧﺮﻳﺪ ﺍﺧﺘﻴﺎﺭ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻣﻨﻪ، ﺇﻻ ﺃﻧﻪ ﻭﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﳌﻨﺎﻇﲑ ﳝﻜﻨﻨﺎ ﺇﺟﺮﺍﺀ ﻋﻤﻠﻴﺔ ﺍﻻﺳﺘﻌﻼﻡ ﺗﻠﻚ ﻭﻛﺄﻬﻧﺎ ﻣﻦ ﺟﺪﻭﻝ ﻭﺣﻴﺪ، ﻭﺫﻟﻚ ﻣﻦ ﺧﻼﻝ ﻣﺎ ﻳُﻌﺮﻑ ﺑﺎﺳﻢ ﺍﳌﻨﻈﺎﺭ ﺍﳌﹸﺠﺰّﺉ 3 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﳌﻨﺎﻇﲑ ﺍﻟﺘﺤﻜﻢ ﺑﻌﻤﻠﻴﺎﺕ ﺍﻟﻮﻟﻮﺝ ﺇﱃ ﺍﳌﻌﻄﻴﺎﺕ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻷﺳﻄﺮ ﺃﻭ ﺍﻷﻋﻤﺪﺓ ﻋﻤﻠﻴﺔ ﺇ ﺍ ﺓ ﺇﺩﺍﺭﺓ ﻂ ﻠ ﺍﳌﻌﻄﻴﺎﺕ ﻭﺗﺒﺴﻴﻂ ﺍﻟﻮﻟﻮﺝ ﺇﱃ ﺍﳌ ﻄ ﺎ ﻋﻤﻠﻴﺎﺕ ﺍﻟ ﻟ ﳊﺼﺮ ﻠ ﺎ ﺃﻳﻀﺎ ﳊ ﺍﳌﻨﺎﻇﲑ ﺃ ﺎﹰ { ﺗُُﺴﺘﺨﺪﻡ ﺍﳌ ﺎﻇ ﺍﻟﺴﻤﺎﺣﻴﺎﺕ ،ﺇﺫ ﺃﻧﻪ ﻟﻴﺲ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺗﻮﺻﻴﻒ ﲰﺎﺣﻴﺎﺕ ﺍﻟﻮﻟﻮﺝ ﺇﱃ ﺍﳉﺪﺍﻭﻝ ﺇﺫﺍ ﻣﺎ ﲤﺖ ﺗﻠﻚ ﺍﻟﻌﻤﻠﻴﺔ ﻋﻠﻰ ﺍﳌﻨﻈﺎﺭ ﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﺗﻠﻚ ﺍﳉﺪﺍﻭﻝ ،ﲝﻴﺚ ﳝﻜﻦ ﺇﺳﻨﺎﺩ ﻛﺎﻓﺔ ﺃﻧﻮﺍﻉ ﺍﻟﺴﻤﺎﺣﻴﺎﺕ ﻣﻦ ﻣﺴﺘﻮﻯ ﺍﳌﻨﻈﺎﺭ .ﳝﻜﻦ ﺗﺼﻨﻴﻒ ﲰﺎﺣﻴﺎﺕ ﺍﻟﻮﻟﻮﺝ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﳌﻨﺎﻇﲑ ﺇﱃ ﻧﻮﻋﲔ ﺃﺳﺎﺳﻴﲔ ،ﳘﺎ: { ﺍﳊﻤﺎﻳﺔ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻷﻋﻤﺪﺓ :ﲝﻴﺚ ﳝﻜﻦ ﺍﻟﺴﻤﺎﺡ ﺃﻭ ﻋﺪﻡ ﺍﻟﺴﻤﺎﺡ ﳌﺴﺘﺨﺪﻣﻲ ﺍﳌﻨﻈﺎﺭ ﺑﺎﻟﻮﻟﻮﺝ ﺇﱃ ﻣﻌﻄﻴﺎﺕ ﻋﻤﻮﺩ ﺑﺎﻟﻜﺎﻣﻞ ﺍﳌﻨﻈﺎﺭ ﺍﻟﺴﻤﺎﺡ ﳌﳌﺴﺘﺨﺪﻣﻲ ﺍﳌ ﻈﺎ ﺍﻟﺴﻤﺎﺡ ﺃﺃﻭ ﻋﺪﻡ ﺍﻟ ﺎ ﳝﻜﻦ ﺍﻟ ﺎ ﺍﻷﺳﻄﺮ :ﲝﻴﺚ ﻜ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻷ ﻄ ﺍﳊﻤﺎﻳﺔ ﻠ { ﺍﳊ ﺎ ﺑﺎﻟﻮﻟﻮﺝ ﺇﱃ ﺃﺳﻄﺮ ﳏﺪﺩﺓ ﻣﻦ ﻋﻤﻮﺩ ﻣﻌﲔ ،ﻭﺫﻟﻚ ﺑﺘﻄﺒﻴﻖ ﺷﺮﻁ ﻓﻠﺘﺮﺓ ﻣﻨﺎﺳﺐ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺒﺎﺭﺓ WHEREﻋﻠﻰ ﺗﻠﻚ ﺍﻷﺳﻄﺮ ﺃﺛﻨﺎﺀ ﺗﻌﺮﻳﻒ ﺍﳌﻨﻈﺎﺭ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﳌﻨﺎﻇﲑ ﺗﻌﺪﻳﻞ ﺍﳌﻌﻄﻴﺎﺕ ﻋﱪ ﺍﳌﻨﺎﻇﲑ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﳌﻨﺎﻇﲑ ﰲ ﺗﻌﻠﻴﻤﺎﺕ Update, Insert, Deleteﻛﻤﺎ { ﻜ ﻧﺴﺘﺨﺪﻡ ﺍﳉﺪﺍﻭﻝ. { ﺑﺎﻹﺿﺎﻓﺔ ﻟﻘﻴﻮﺩ ﺍﻟﺘﻌﺪﻳﻞ ﻋﻠﻰ ﺍﳉﺪﺍﻭﻝ ﺗﻮﺟﺪ ﺑﻌﺾ ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ ﺍﻟﺘﻌﺪﻳﻞ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﳌﻨﺎﻇﲑ: z z z z z 4 ﻻ ﳝﻜﻦ ﺗﻌﺪﻳﻞ ﺃﻛﺜﺮ ﻣﻦ ﺟﺪﻭﻝ ﰲ ﺍﳌﻨﻈﺎﺭ. ﻻ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺗﻌﻠﻴﻤﺔ ﺍﳊﺬﻑ ﰲ ﻣﻨﻈﺎﺭ ﻣﺘﻌﺪﺩ ﺍﳉﺪﺍﻭﻝ ﻻ ﳝﻜﻦ ﺗﻌﺪﻳﻞ ﺍﻷﻋﻤﺪﺓ ﺍﶈﺴﻮﺑﺔ. ﻻ ﳝﻜﻦ ﺗﻌﺪﻳﻞ ﺍﳌﻌﻄﻴﺎﺕ ﰲ ﻣﻨﻈﺎﺭ ﳛﺘﻮﻱ ﺇﺣﺪﻯ ﺍﻟﻌﺒﺎﺭﺍﺕ GROUP BY, DISTINCT, TOP, UNION ﻗﺪ ﻳﻨﺘﺞ ﻋﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻌﺪﻳﻞ ﻣﺸﺎﻛﻞ ﺗﺘﻌﻠﻖ ﺑﺘﻌﺮﻳﻒ ﺍﳉﺪﺍﻭﻝ ﺍﳌﺸﻜﻠﺔ ﻟﻠﻤﻨﻈﺎﺭ. إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺇﻧﺸﺎﺀ ﺍﳌﻨﺎﻇﲑ { { { { { { { ﻳﻨﺒﻐﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺍﺳﻢ ﻣﻌﺒّﺮ ﻟﻠﻤﻨﻈﺎﺭ ،ﻭﻫﻮ ﳜﻀﻊ ﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﺴﻤﻴﺔ ﺍﳌﻌﺮﻭﻓﺔ ﻋﺒﺎﺭﺓﺓ ﻋﻦ ﺎﺗﺎﺑﻊ ﲡﲡﻤﻴﻌﻲ ،ﺃﺃﻭ ﺗﻜﻮﻥ ﺎ ﻠﻚ ﺍﻟﺍﻟﱵ ﻜ ﻭﺧﺎﺻﺔ ﺗﻠﻚ ﺍﳌﻨﻈﺎﺭ ،ﺎ ﺃﻋﻤﺪﺓ ﺍﳌ ﻈﺎ ﻳﻨﺒﻐﻲ ﺗﺴﻤﻴﺔ ﺃ ﺓ ﺍﻷﻋﻤﺪﺓ ﺫﺍﺕ ﺍﻷﲰﺎﺀ ﺍﳌﺘﺸﺎﻬﺑﺔ ﺑﲔ ﺍﳉﺪﺍﻭﻝ ﺍﻟﱵ ﻳﺴﺘﺨﺪﻣﻬﺎ ﺍﳌﻨﻈﺎﺭ ﻳُﻔﻀﻞ ﺩﺍﺋﻤﹰﺎ ﻗﺒﻞ ﺇﻧﺸﺎﺀ ﺍﳌﻨﻈﺎﺭ ﺃﻥ ﺗﺘﻢ ﻋﻤﻠﻴﺔ ﺍﺧﺘﺒﺎﺭ ﻟﻼﺳﺘﻌﻼﻡ ﺍﻟﺬﻱ ﻳُﻜﻮّﻥ ﺫﻟﻚ ﺍﳌﻨﻈﺎﺭ ﻻ ﳝﻜﻦ ﺃﻥ ﲢﺘﻮﻱ ﺗﻌﻠﻴﻤﺔ CREATE VIEWﻋﻠﻰ ﺃﻱ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ ﺍﳌﻔﺘﺎﺣﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ: INTOﻭ COMPUTEﻭ COMPUTE BY. ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡﻡ TOPﺃﻳﻀﹰﺎ ﻻ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡﻡ ﺍﻟﻌﺒﺎﺭﺓ ORDER BYﰲ ﺍﳌﻨﻈﺎﺭ ﻣﺎ ﱂ ﻢ ﻻ ﳝﻜﻦ ﺃﻥ ﻳُﺸﲑ ﺍﳌﻨﻈﺎﺭ ﻷﻛﺜﺮ ﻣﻦ ١٠٢٤ﻋﻤﻮﺩﺍﹰ ،ﻛﻤﺎ ﻻ ﳝﻜﻦ ﺃﻥ ﻳﺸﲑ ﺇﱃ ﺟﺪﺍﻭﻝ ﻣﺆﻗﺘﺔ ﺃﻭ ﻣﺘﺤﻮﻻﺕ ﻣﻦ ﳕﻂ "ﺟﺪﻭﻝ" ﻻ ﺑﺪ ﺃﻥ ﻳﺘﻢ ﺇﻧﺸﺎﺀ ﺍﳌﻨﻈﺎﺭ ﺿﻤﻦ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ ﺍﳊﺎﻟﻴّﺔ ،ﻣﻊ ﺍﻟﻌﻠﻢ ﺃﻧﻪ ﳝﻜﻦ ﻟﻠﻤﻨﻈﺎﺭ ﺃﻥ ﻳُﺸﲑ ﺇﱃ ﻋﺪّﺓ ﺟﺪﺍﻭﻝ ﺃﻭ ﻣﻨﺎﻇﲑ ﰲ ﻗﺎﻋﺪﺓ ﻣﻌﻄﻴﺎﺕ ﺃﺧﺮﻯ ﺃﻭ ﺣﱴ ﻋﻠﻰ ﳐﺪﱢﻡ ﺁﺧﺮ )ﰲ ﺣﺎﻝ ﺍﺳﺘﺨﺪﺍﻡ ﺍﺳﺘﻌﻼﻣﺎﺕ ﻣﻮﺯّﻋﺔ( ﺇﻧﺸﺎﺀ ﺍﳌﻨﺎﻇﲑ ﺑﺎﺳﺘﺨﺪﺍﻡ T-SQL ] CREATE VIEW [ < database_name > . ] [ < owner > . ] ) ] view_name [ ( column [ ,...n ] ] [ WITH < view_attribute > [ ,...n AS select_statement ] [ WITH CHECK OPTION =< view_attribute > :: | { ENCRYPTION | SCHEMABINDING } VIEW_METADATA 5 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺧﻮﺍﺹ ﺍﳌﻨﻈﺎﺭ View Attributes WITH ENCRYPTION ﲝﻴﺚ ﻻ T-SQLﻴ ﺗﻌﻠﻴﻤﺎﺕ Q ﻣﻦ ﻴ ﻮﻯ ﺍﳌﻨﻈﺎﺭﺭ ﻦ ﺗﺸﻔﲑ ﳏﺘﻮﻯ ﺑﻐﺮﺽ ﲑ ﺍﳌﻨﻈﺎﺭ ﻭﻭﺫﻟﻚ ﺑ ﺮﺽ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﳋﺎﺻﺔ ﺃﺛﻨﺎﺀ ﺇﺇﻧﺸﺎﺀ ﺭ ﻡ { ﳝﳝﻜﻨﻨﺎ ﳝﻜﻦ ﺍﺳﺘﻌﺮﺍﺽ ﺃﻭ ﺗﻌﺪﻳﻞ ﺫﻟﻚ ﺍﳌﻨﻈﺎﺭ ﺑﻌﺪ ﺗﺸﻔﲑ ﳏﺘﻮﻳﺎﺗﻪ { ﺗُﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﳋﺎﺻﺔ ﻷﻏﺮﺍﺽ ﺍﻹﺩﺍﺭﺓ ﺃﻭ ﻟﻀﻤﺎﻥ ﺍﻷﻣﻦ ﲝﻴﺚ ﻻ ﳝﻜﻦ ﻧﺸﺮ ﳏﺘﻮﻯ ﺍﳌﻨﻈﺎﺭ ،ﻣﻊ ﺍﻟﻌﻠﻢ ﺃﻧﻪ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺍﳊﻔﺎﻅ ﻋﻠﻰ ﻧﺴﺨﺔ ﻣﻦ ﺍﳌﺨﻄﻮﻁ ﺍﻟﺬﻱ ﻳﻌﱪ ﻋﻦ ﺍﳌﻨﻈﺎﺭ ﻗﺒﻞ ﺗﺸﻔﲑﻩ ﻭﺫﻟﻚ ﻣﻦ ﺃﺟﻞ ﺇﻋﺎﺩﺓ ﺇﻧﺸﺎﺋﻪ ﺃﻭ ﺗﻌﺪﻳﻠﻪ ﻼ ﻣﺴﺘﻘﺒ ﹰ WITH SCHEMABINDING { ﺗﺘﻄﻠﺐ ﻫﺬﻩ ﺍﳋﺎﺻﺔ ﺍﻟﺘﻌﺒﲑ ﻋﻦ ﻛﻞ ﻣﻦ ﺍﺳﻢ ﺍﻟﻐﺮﺽ ﻭﺍﺳﻢ ﻣﺎﻟﻜﻪ ﻟﻜﻞ ﻣﻦ ﺍﻷﻏﺮﺍﺽ ﺍﳌﻜﻮّﻧﺔ ﻟﻠﻤﻨﻈﺎﺭ { ﳝﻨﻊ ﻫﺬﺍ ﺍﳋﹶﻴﺎﺭ ﻛﺎﻓﺔ ﺍﻷﻏﺮﺍﺽ ﺫﺍﺕ ﺍﻻﺭﺗﺒﺎﻁ ﺑﺎﳌﻨﻈﺎﺭ ﻣﻦ ﺃﻥ ﻳﺘﻢ ﺣﺬﻓﻬﺎ ﺃﻭ ﺗﻌﺪﻳﻠﻬﺎ ﺑﻄﺮﻳﻘﺔ ﺗﺆﺛﺮ ﻋﻠﻰ ﺍﳌﻨﻈﺎﺭ ،ﻣﺎ ﱂ ﻳﺘﻢ ﺣﺬﻑ ﺫﻟﻚ ﺍﳌﻨﻈﺎﺭ ﺃﻭ ﺇﺯﺍﻟﺔ ﺗﻔﻌﻴﻞ ﻫﺬﻩ ﺍﳋﺎﺻّﺔ ﻓﻴﻪ VIEW_METADATA { ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﳋﺎﺻﺔ ﳚﻌﻞ SQL Serverﻳﻌﻴﺪ ﻣﻌﻠﻮﻣﺎﺕ ﻟﻠﱪﻧﺎﻣﺞ ﺗﺴﻤﺢ ﳍﺎ ﺑﺘﺤﻘﻴﻖ ﻣﱰﻟﻘﺔ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻌﺪﻳﻞ ﻣﻦ ﺟﻬﺔ ﺍﻟﺰﺑﻮﻥ. WITH CHECK OPTION { ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﳝﻜﻨﻨﺎ ﺣﺼﺮ ﺍﻷﺳﻄﺮ ﺍﻟﱵ ﻳﻌﻴﺪﻫﺎ ﺍﳌﻨﻈﺎﺭ ﻣﻦ ﺧﻼﻝ ﺍﻟﻌﺒﺎﺭﺓ WHEREﰲ ﻋﺒﺎﺭﺓ ﺍﻻﺧﺘﻴﺎﺭ ﺍﳌﻜﻮّﻧﺔ ﻟﻠﻤﻨﻈﺎﺭ ،ﺇﻻ ﺃﻥ ﺫﻟﻚ ﻻ ﳝﻨﻊ ﺍﳌﺴﺘﺨﺪﻡ ﻣﻦ ﺗﻌﺪﻳﻞ ﺃﻭ ﺇﺿﺎﻓﺔ ﺃﺳﻄﺮ ﺟﺪﻳﺪﺓ ﺇﱃ ﺫﻟﻚ ﺍﳌﻨﻈﺎﺭ ،ﻭﻗﺪ ﻳﻌﺪﻝ ﺍﳌﺴﺘﺨﺪﻡ ﺃﺳﻄﺮﹰﺍ ﻻ ﺗﻈﻬﺮ ﰲ ﺍﳌﻨﻈﺎﺭ ،ﻟﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﳋﺎﺻﻴﺔ ﳝﻨﻊ ﺍﳌﺴﺘﺨﺪﻡ ﻣﻦ ﺗﻌﺪﻳﻞ ﺃﻭ ﺇﺿﺎﻓﺔ ﺃﺳﻄﺮ ﻻ ﺗﻈﻬﺮ ﰲ ﺍﳌﻨﻈﺎﺭ. ﻣﺜﺎﻝ 6 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﳌﻨﺎﻇﲑ ﺍﺠﻤﻟﺰﺃﺓ Partitioned Views { ﺗﺴﺘﺨﺪﻡ ﺍﳌﻨﺎﻇﲑ ﺍﺠﻤﻟﺰﺃﺓ ﻟﻠﻮﻟﻮﺝ ﺇﱃ ﺍﳌﻌﻄﻴﺎﺕ ﺍﳌﻘﺴﻤﺔ ﺃﻓﻘﻴﹰﺎ ﺃﻭ ﻝ ﺟﺪﺍﻭﻝ ﻋﻠﻰ ﻋﺪﺓ ﺃﺃﻗﺴﺎﻡ ﰲ ﻋﺪﺓ ﺍﺠﻤﻟﺰﺃﺓ ﻠ ﺍﳌﻌﻄﻴﺎﺕ ﺠﻤﻟ ﺃ ﺇﱃ ﳌ ﻄ ﱃ { ﳝﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﳉﺪﺍﻭﻝ ﺍﻟﱵ ﲢﺘﻮﻱ ﻋﻠﻰ ﺍﳌﻌﻄﻴﺎﺕ ﺍﺠﻤﻟﺰﺃﺓ ،ﻋﻠﻰ ﻧﻔﺲ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ ﺃﻭ ﰲ ﻗﺎﻋﺪﺓ ﻣﻌﻄﻴﺎﺕ ﺃﺧﺮﻯ ﺃﻭ ﺣﱴ ﻋﻠﻰ ﳐﺪﱢﻡ ﺁﺧﺮ ﺃﻭ ﻋﺪّﺓ ﳐﺪﻣﺎﺕ { ﻳﺘﻢ ﺇﻧﺸﺎﺀ ﺍﳌﻨﺎﻇﲑ ﺍﺠﻤﻟﺰﺃﺓ ﺍﻟﱵ ﺗﻘﻮﻡ ﺑﺘﺠﻤﻴﻊ ﺗﻠﻚ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ UNION ALL ﺾ ﻣﻦ ﺧﻼﻝ ﺍﻟ ﻠ ﺔ ﺑﻌﻀﻬﺎﺎ ﺍﻟﺍﻟﺒﻌﺾ ﻭﻋﺮﺿﻬﺎﺎ ﻣﻊ ﻀ ﺿ ﻭﺫﻟﻚ ﺑﻌﺪ ﺍﻹﺷﺎﺭﺓ ﺇﱃ ﺍﳌﺨﺪﻡ ﻭﺍﳉﺪﻭﻝ ﻭﺍﳉﺰﺀ ﺍﳌﻨﺎﺳﺐ ﰲ ﻛﻞ ﺍﺳﺘﻌﻼﻡ ﻣﻦ ﺍﻻﺳﺘﻌﻼﻣﺎﺕ ﺍﳌﻜﻮّﻧﺔ ﻟﻠﻤﻨﻈﺎﺭ ﺍﳌﻨﺎﻇﲑ ﺍﳌﻔﻬﺮﺳﺔ Indexed Views { ﻫﻲﻲ ﻣﻨﺎﻇﲑ ﻳﺘﻢﻢ ﺑﻨﺎﺅﻫﺎ ﻭﲣﺰﻳﻨﻬﺎ ﳊﲔ ﺍﳊﺎﺟﺔ ﺇﻟﻴﻬﺎ ﻻﺣﻘﹰﺎ. { ﲢﺴﻦ ﺍﳌﻨﺎﻇﲑ ﺍﳌﻔﻬﺮﺳﺔ ﻣﻦ ﺃﺩﺍﺀ ﺑﻌﺾ ﺃﻧﻮﺍﻉ ﺍﳌﻨﺎﻇﲑ ﻣﺜﻞ ﺍﳌﻨﺎﻇﲑ ﺍﻟﱵ ﺗﺴﺘﺨﺪﻡ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﺘﺠﻤﻴﻌﻴﺔ. { ﻟﻜﻨﻬﺎ ﻏﲑ ﻣﻨﺎﺳﺒﺔ ﰲ ﺣﺎﻝ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﻜﺒﲑ ﻟﺘﻌﺪﻳﻞ ﺍﳌﻌﻄﻴﺎﺕ. ﻋﻠﻴﻪ ﻓﺮﻳﺪ ﻠ ﻋﻨﻘﻮﺩﻱ ﻓ ﺪ ﺑﺒﻨﺎﺀ ﻓﻓﻬﺮﺱ ﻘ ﺍﳌﻨﺎﻇﲑ ﺎ ﻓﻬﺮﺳﺔ ﺍﳌ ﺎﻇ { ﺗﺗﺘﻢ ﻓ ﺔ ﻭﻳﺘﻄﻠﺐ ﻫﺬﺍ ﺗﻮﺍﻓﺮ ﻋﺪﺓ ﺷﺮﻭﻁ ﰲ ﺍﻟﻔﻬﺮﺱ ﻭﰲ ﻋﻤﻠﻴﺔ ﺇﻧﺸﺎﺀ ﺍﻟﻔﻬﺮﺱ. 7 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﳌﻨﺎﻇﲑ ﻭﺃﺩﺍﺀ ﺍﻻﺳﺘﻌﻼﻣﺎﺕ ﺍﻻﺳﺘﻌﻼﻣﺎﺕ ﻳﺆﺛﺮﺮ ﺍﺳﺘﺨﺪﺍﻡﻡ ﺍﳌﻨﺎﻇﲑﲑ ﻋﻠﻰﻰ ﺃﺩﺍﺀﺀ ﻻ ﻼ { ﻻ ﻳﺆ ﺣﻴﺚ ﻳﻘﻮﻡ Query Optimizerﺑﺎﻟﻌﻤﻞ ﻋﻠﻰ ﲢﺴﲔ ﻼ ﺃﺩﺍﺀ ﺍﻻﺳﺘﻌﻼﻡ ﺑﻌﺪ ﺭﺑﻄﻪ ﺑﺎﳌﻨﻈﺎﺭ ﻣﺎ ﻳﻌﲏ ﺃﺩﺍ ًﺀ ﳑﺎﺛ ﹰ ﻟﻠﺤﺎﻟﺔ ﺍﻟﱵ ﻻ ﻳﺴﺘﻌﻤﻞ ﻓﻴﻬﺎ ﺍﳌﻨﻈﺎﺭ. ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰﻧﺔ Stored Procedures { ﺗﻌﱪ ﺍﻹﺟﺮﺍﺋﻴﺔ ﺍﳌﺨﺰّﻧﺔ ﻋﻦ ﺗﻌﻠﻴﻤﺔ ﺃﻭ ﺃﻛﺜﺮ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ T-SQL ﺍﳌﻌﻄﻴﺎﺕ ﻣُُﺨ ّﺰّﻧﺔ ﻛﻛﻐﺮﺽ ﺗﻨﻔﻴﺬﻱ ﰲ ﻗﺎﻋﺪﺓ ﳌ ﻄ { ﳝﻜﻦ ﺍﺳﺘﺪﻋﺎﺀﻫﺎ ﻣﻦ ﺑﺮﻧﺎﻣﺞ ﺃﻭ ﺇﺟﺮﺍﺀ ﺁﺧﺮ ﺃﻭ ﻣﻦ ﻗﺎﺩﺡ { ﳝﻜﻦ ﲤﺮﻳﺮ ﺍﳌﻌﺎﻣﻼﺕ ﻣﻦ ﻭﺇﱃ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ،ﳑﺎ ﻳﺰﻳﺪ ﻣﻦ ﻓﺎﺋﺪﺓ ﻭﻣﺮﻭﻧﺔ ﺗﻠﻚ ﺍﻷﻏﺮﺍﺽ { ﺗﻌﻴﺪ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﻗﻴﻤﺔ ﺭﻗﻤﻴﺔ ﳏﺪﺩﺓ ﺃﻭ ﳎﻤﻮﻋﺔ ﻣﻦ Resultsets 8 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﻭﻓﻮﺍﺋﺪ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ { { { { { { ﳝﻜﻨﻨﺎ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﺃﻥ ﳓﻘﻖ ﻣﻔﻬﻮﻡ ﺍﻟﱪﳎﺔ ﺍﳌﹸﺠﺘﺰﺃﺓ M d l PProgramming Modular i ﺣﺼﺮ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻮﻟﻮﺝ ﺇﱃ ﺍﳉﺪﺍﻭﻝ ﻭﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﻣﻔﻬﻮﻡ ﺍﻟﻮﻟﻮﺝ ﺇﱃ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﺍﻟﺘﻮﺍﺑﻊ ﲣﻔﻴﺾ ﺍﻟﻀﻐﻂ ﻋﻠﻰ ﺍﻟﺸﺒﻜﺔ ﺗﺘﻤﺘﻊ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﺑﺴﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺃﻛﱪ ﻣﻦ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﳐﻄﻮﻃﺎﺕ T- SQL ﲣﻔﻴﺾ ﺍﻷﺧﻄﺎﺀ ﺍﻟﱪﳎﻴﺔ ﻧﺴﺒﻴﹰﺎ ﺇﻣﻜﺎﻧﻴﺎﺕ ﺿﻤﺎﻥ ﺗﻜﺎﻣﻞ ﺍﳉﺪﺍﻭﻝ ﻣﺴﺎﻭﺉ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﻣﻘﺎﺭﻧ ﹰﺔ ﻣﻊﻊ ﺟﻴﺪﺓ ﺭ T-SQLﻟﻐﺔ ﺑﺮﺑﺮﳎﺔ ﻴ { ﻻ ﺗﻌﺘﱪﱪ ﻟﻐﺔ Q ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﺍﻷﺧﺮﻯ { ﺿﻌﻒ ﺍﻟﺒﻴﺌﺔ ﺍﻟﱪﳎﻴﺔ ﺍﻟﱵ ﺗﻌﻤﻞ ﻋﻠﻴﻬﺎ ،ﻣﺜﻞ ﺍﻟﺘﻨﻘﻴﺢ ﻭﺗﺘﺒﻊ ﺍﻷﺧﻄﺎﺀ debuggingﻭ ﺇﺩﺍﺭﺓ ﺍﻟﻨﺴﺦ Versioningﻭﻏﲑﻫﺎ { ﺯﻳﺎﺩﺓ ﺻﻌﻮﺑﺔ ﺍﻟﻨﻘﻞ ﻟﻘﻮﺍﻋﺪ ﻣﻌﻄﻴﺎﺕ ﺃﺧﺮﻯ Portablility 9 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺇﻧﺸﺎﺀ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ T-SQL ﻋﺒﺎﺭﺓ ﺇﻨﺸﺎﺀ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﺨﺯّﻨﺔ ﻤﻊ ﺘﺤﺩﻴﺩ ﺍﺴﻡ ﺍﻟﻤﺎﻟﻙ ﻭﺍﺴﻡ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﺫﻱ ﻴﺨﻀﻊ ﻟﺸﺭﻭﻁ ﺍﻟﺘﺴﻤﻴﺔ ﺍﻟﻤﻌﺭﻭﻓﺔ ﺍﻟﺘﻲ ﺘﺘﺸﺎﺒﻪ ﻓﻓﻲ ﺍﻷﺴﻤﺎﺀ ،ﺒﺤﻴﺙ ﻴﻤﻜﻥ ﻤﻥ ﻴﺴﺘﺨﺩﻡ ﻟﺘﺠﻤﻴﻊ ﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﺘ ﺭﻗﻡ ﻴُﺴﺘﺨﺩﻡ ﺨﻼل ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ﺃﻥ ﻨﻘﻭﻡ ﺒﺤﺫﻑ ﻋﺩّﺓ ﺇﺠﺭﺍﺌﻴﺎﺕ ﻤﺨﺯّﻨﺔ ﺩﻓﻌﺔ ﻭﺍﺤﺩﺓ ]CREATE PROCEDURE [ owner. procedure_name ] [ ; number ﻗﺎﺌﻤﺔ ﺍﻟﻤﻌﺎﻤﻼﺕ ،ﺒﺤﻴﺙ ﻴﺘﻡ ﺘﺤﺩﻴﺩ ﺍﺴﻡ ﺍﻟﻤﻌﺎﻤل ﻭﻨﻤﻁﻪ ،ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﻗﻴﻤﺘﻪ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ =[ [ [(] @parameter data_type ]default_value ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﻔﺘﺎﺤﻴﺔ ﺍﻟﺘﻲ ﺘﺩل ﻋﻠﻰ ﺃﻥ ﺍﻟﻤﻌﺎﻤل ﺍﻟﻤﺤﺩﺩ ﻫﻭ ﻤﻌﺎﻤل ﺨﺭﺝ؛ ﻤﺘﺘﺎﻟﻴﺔ ﺒﺒﻘﻴﺔ ﻤﻌﺎﻤﻼﺕ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﺨﺯﻨﺔ ] [ OUTPUT ] ])[ ] [ ,...n ﻭﻫﻲ ﺍﻟﺨﺎﺼﺔ ﺍﻟﺘﻲ ﺘﺤﺩﺩ ﺃﻨﻪ ﻻ ﻴﻨﺒﻐﻲ ﺘﺨﺯﻴﻥ ﺨﻁﺔ ﺍﻻﺨﺘﺯﺍل ﺍﻟﻤﻁﺒﻘﺔ ﻤﻥ ﺃﺠل ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺫ ﺍﻟﻤﺴﺘﻘﺒﻠﻴﺔ ﻟﻺﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﺨﺯّﻨﺔ ،ﺒﺤﻴﺙ ﻴﺘﻡ ﺇﻋﺎﺩﺓ ﺒﻨﺎﺀ ﺘﻠﻙ ﺍﻟﺨﻁﺔ ﻓﻲ ﻜل ﻤﺭﺓ ﻭﻗﺕ ﺍﻟﺘﻨﻔﻴﺫ ﺨﺎﺼﺔ ﺘﺴﺘﺨﺩﻡ ﻟﺘﺸﻔﻴﺭ ﻤﺤﺘﻭﻯ ﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﻤﺨﺯّﻨﺔ) ،ﺭﺍﺠﻊ ﺨﺎﺼﺔ ﺍﻟﺘﺸﻔﻴﺭ ﻓﻲ ﺍﻟﻤﻨﺎﻅﻴﺭ( ﻟﻠﺩﻻﻟﺔ ﻋﻥ ﺇﻤﻜﺎﻨﻴﺔ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺨﺎﺼﺘﻴﻥ ﺍﻟﺴﺎﺒﻘﺘﻴﻥ ﻤﻌﹰﺎ ﺘﻌﻠﻴﻤﺎﺕ T-SQLﺍﻟﻤﻜﻭّﻨﺔ ﻟﻺﺠﺭﺍﺌﻴﺔ ﻗﻴﻤﺔ ﺍﻟﺨﺭﺝ -ﻓﻲ ﺤﺎل ﻭﺠﻭﺩﻫﺎ -ﺍﻟﺘﻲ ﺘﻌﻴﺩﻫﺎ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﺨﺯّﻨﺔ ،ﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻨﻪ ﻴﻔﻀل ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺒﺎﺭﺓ RETURN 0ﻓﻲ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﻴﺘﻡ ﻓﻴﻬﺎ ﺘﻨﻔﻴﺫ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﺨﺯّﻨﺔ ﺒﺸﻜل ﺴﻠﻴﻡ ،ﻭﺇﻋﺎﺩﺓ ﺭﻗﻡ ﺁﺨﺭ ﺨﻼﻑ ﺫﻟﻙ | { RECOMPILE [ WITH | ENCRYPTION ] } RECOMPILE , ENCRYPTION ] AS sql_statement [ ...n ]][return [integer_status_value ﺗﻨﻔﻴﺬ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰﻧﺔ ]][[exec[ute [ ]] [@status @[ ]]= ][owner.]procedure_name[; number ]] [[@parm_name =] expression [output][, ... ][with recompile 10 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﻣﻄﺎﺑﻘﺔ ﺍﻷﲰﺎﺀ ﺍﳌﺆﺟﻠﺔ Deferred Name Resolution SQL ﻮﻡ Q Server ﳐﺰﻥ ﻻ ﻳﻳﻘﻮﻡ ﺇﺟﺮﺍﺀ ﺰ { ﻋﻨﺪ ﺇﺇﻧﺸﺎﺀ ﺇ ﺮ ﺑﺎﻟﺘﺄﻛﺪ ﻣﻦ ﺗﻮﺍﺟﺪ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﻷﺧﺮﻯ ﺍﻟﱵ ﻳﻄﻠﺒﻬﺎ ﻫﺬﺍ ﺍﻟﻺﺟﺮﺍﺀ. { ﻳﻔﻴﺪ ﻫﺬﺍ ﰲ ﲡﺎﻭﺯ ﺿﺮﻭﺭﺓ ﺗﺮﺗﻴﺐ ﺇﻧﺸﺎﺀ ﺍﻹﺟﺮﺍﺀﺍﺕ. { ﻻ ﻳﻨﻄﺒﻖ ﻫﺬﺍ ﻋﻠﻰ ﺃﲰﺎﺀ ﺍﳉﺪﺍﻭﻝ ﻭﺍﻷﻋﻤﺪﺓ. ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰﻧﺔ ﺍﳌﺘﺪﺍﺧﻠﺔ Nested ﳐﺰﻧﺔ ﺇﺟﺮﺍﺀﺍﺕ ﺰ ﺐ ﺇ ﺮﺀ ﺗﻄﻠﺐ ﺍﳌﺨﺰﻧﺔ ﺃﻥ ﻄ ﻟﻺﺟﺮﺍﺀﺍﺕ ﺰ { ﳝﳝﻜﻦﻦ ﻺ ﺮ ﺀ ﺃﺧﺮﻯ ﻭﳝﻜﻦ ﺃﻥ ﻳﺼﻞ ﻣﺴﺘﻮﻯ ﺍﻟﺘﺪﺍﺧﻞ ﺇﱃ ٣٢ { ﳛﺪﺩ ﺍﻟﺘﺎﺑﻊ @@NESTLEVELﻣﺴﺘﻮﻯ ﺍﻟﺘﺪﺍﺧﻞ { ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﻟﻌﻮﺩﻳﺔ Recursiveﻫﻲ ﺣﺎﻟﺔ ﺧﺎﺻﺔ ﻣﻦ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺘﺪﺍﺧﻠﺔ ﻭﲣﻀﻊ ﻟﻨﻔﺲ ﺍﻟﺸﺮﻭﻁ 11 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﳉﺪﺍﻭﻝ ﺍﳌﺆﻗﺘﺔ ﰲ ﺍﻹﺟﺮﺍﺀﺍﺕ OK ’Error Invalid object name ‘#temp ﺍﺳﺘﺨﺪﺍﻡ ﳕﻂ ﺍﳌﻌﻄﻴﺎﺕ table { ﻳﻔﻀﻞ ﺍﺳﺘﺨﺪﺍﻡ ﳕﻂ ﺍﳌﻌﻄﻴﺎﺕ tableﰲ ﻣﻌﻈﻢ ﺍﳊﺎﻻﺕ ﻟﻸﺳﺒﺎﺏ ﺍﻟﺘﺎﻟﻴﺔ: zﲣﺰﻥ ﳏﺘﻮﻳﺎﺕ ﻫﺬﺍ ﺍﻟﻨﻤﻂ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭﻟﻴﺲ ﰲ ﺍﻟﻘﺎﻋﺪﺓ tempdbﻭﺑﺎﻟﺘﺎﱄ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻪ ﺃﺳﺮﻉ ﺍﻟﺘﺮﲨﺎﺕ ﺍﻹﺟﺮﺍﺀﺍﺕ ﻣﻦﻦ ﻋﺪﺩ ﺮ ﻳﻘﻠﻞ ﺍﺳﺘﺨﺪﺍﻣﻪ ﰲ ﻹ ﺮ zﻳ ﻞ Recompilationsﺍﳌﻄﻠﻮﺑﺔ zﺗﻘﻠﻴﻞ ﻋﺪﺩ ﺍﻷﻗﻔﺎﻝ ﺍﳌﻄﻠﻮﺑﺔ ﻋﻠﻰ ﺍﳉﺪﺍﻭﻝ ﻟﺘﻮﺍﺟﺪ ﺍﳌﻌﻄﻴﺎﺕ ﻓﻘﻂ ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻹﺟﺮﺍﺀ ﻛﻮﻥ ﺍﳉﺪﻭﻝ ﳛﺬﻑ ﺁﻟﻴﹰﺎ ﻋﻨﺪ ﺍﻧﺘﻬﺎﺀ ﺗﻨﻔﻴﺬ ﺍﻹﺟﺮﺍﺀ 12 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﻣﺜﺎﻝ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﻵﻟﻴﺔ Autostart { ﻳﺘﻢ ﺗﺸﻐﻴﻞ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺁﻟﻴﹰﺎ ﻋﻨﺪ ﺗﺸﻐﻴﻞ ﺍﻟﻨﻈﺎﻡ { ﺗﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻹﺟﺮﺍﺀﺍﺕ ﰲ: zﻭﺿﻊ ﺍﻟﺴﻤﺎﺣﻴﺎﺕ ﰲ ﺍﻟﻘﺎﻋﺪﺓ tempdb zﺇﻧﺸﺎﺀ ﺟﺪﻭﻝ ﻣﺆﻗﺖ ﻋﺎﻡ zﺗﺸﻐﻴﻞ ﺑﺮﻧﺎﻣﺞ ﺁﺧﺮ ﻋﻨﺪ ﺗﺸﻐﻴﻞ SQL Serverﺑﺎﺳﺘﺨﺪﺍﻡ xp_cmdshell. ﺗﺸﻐﻴﻞ ﺍﳌﺍﳌﺨﺪﻡ ﻗﺒﻞ ﻞ cacheﻗ ﻞ ﻭﻣﻠﺊ ﺍﻟﺍﻟـ h zﲢﲢﻀﲑ ﻠ { ﻳﺘﻢ ﺗﺸﻐﻴﻞ ﺇﺟﺮﺍﺀ ﺁﻟﻴﹰﺎ ﻋﻨﺪ ﺇﻗﻼﻉ ﺍﳌﺨﺪﻡ ﰲ ﺣﺎﻝ ﻛﺎﻥ ﻟﺪﻳﻪ ﺍﳋﺎﺻﺔ startupﻣﻔﻌّﻠﺔ ،ﻭﻳﺘﻢ ﺗﻔﻌﻴﻠﻬﺎ ﻛﻤﺎ ﻳﻠﻲ: sp_procoption procedure_name, startup, true 13 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﻹﺿﺎﻓﻴﺔ Extended { { { { { { { ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﺗﻮﺍﺑﻊ ﻣﻮﺟﻮﺩﺓ ﰲ ﻣﻜﺘﺒﺎﺕ DLLﻭﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ Cﺃﻭ ... C++ ﺍﲰﻬﺎ ﺑـ _xp ﻳﺒﺪﺃ ﺍ ﺎ ﺃ ﺗﺘﻮﺍﺟﺪ ﰲ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ masterﻓﻘﻂ ﻼ ﻋﻨﺪ ﻃﻠﺒﻬﺎ ﺗﻌﺎﻣﻞ ﻣﺜﻞ ﻣﻌﺎﻣﻠﺔ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﻻﻋﺘﻴﺎﺩﻳﺔ ﻟﻜﻦ ﳚﺐ ﺫﻛﺮ ﺍﲰﻬﺎ ﻛﺎﻣ ﹰ exec master..xp_fixeddrives ﺗﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻹﺟﺮﺍﺀﺍﺕ ﻧﻔﺲ ﻓﻀﺎﺀ ﺍﻟﺬﺍﻛﺮﺓ ﺍﳋﺎﺹ ﺑـ SQL Serverﻟﺬﻟﻚ ﻗﺪ ﺗﺴﺒﺐ ﺍﻷﺧﻄﺎﺀ ﰲ ﻫﺬﻩ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺿﺮﺭﹰﺍ ﻛﺒﲑﹰﺍ ﻟـ SQL Server sp_addeﻭﻭﲢﺬﻑ ﺑﺑﺎﺳﺘﺨﺪﺍﻡﻡ sp addextendedproc ﺍﻹﺟﺮﺍﺀﺀ te dedp oc SQﺑﺑﺎﺳﺘﺨﺪﺍﻡﻡ ﻹ ﺮ SQL Se Server ﺗﻀﺎﻑ ﺇﱃ ve ﻀ ﺍﻹﺟﺮﺍﺀ sp_dropextendedprocﻭﻳﺴﺘﻌﻠﻢ ﻋﻨﻬﺎ ﺑـ sp_helpextendedproc ﺃﺷﻬﺮ ﻫﺬﻩ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﻌﺮﻓﺔ ﰲ SQL Serverﻫﻮ xp_cmdshellﺍﻟﺬﻱ ﻳﺴﻤﺢ ﺑﺘﺸﻐﻴﻞ ﺑﺮﻧﺎﻣﺞ ﺧﺎﺭﺟﻲ ﻣﺜﻞ ’*EXEC xp_cmdshell ‘DIR c:\*. ﺍﻟﻘﻮﺍﺩﺡ Triggers { ﺗﻌﱪ ﺍﻟﻘﻮﺍﺩﺡ ﺣﺎﻻﺕ ﺧﺎﺻﺔ ﻣﻦ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ،ﲝﻴﺚ ﻳﺘﻢ ﺍﳌﻌﻄﻴﺎﺕ ﳊﺪﻭﺙ ﺗﻌﺪﻳﻼﺕ ﰲ ﳌ ﻄ ﻧﺘﻴﺠﺔ ﳊ ﺗﻠﻘﺎﺋﻴﺎ ﹰ ﹰ ﺗﻨﻔﻴﺬﻫﺎ { ﻳﺘﻢ ﺇﻧﺸﺎﺀ ﺍﻟﻘﻮﺍﺩﺡ ﻋﻠﻰ ﺍﳉﺪﺍﻭﻝ ،ﻛﻤﺎ ﻳﺘﻢ ﺭﺑﻂ ﺗﻨﻔﻴﺬﻫﺎ ﺑﻮﻗﻮﻉ ﺣﺪﺙ ﺃﻭ ﺃﻛﺜﺮ ﲝﻴﺚ ﻳﺮﺗﺒﻂ ﺗﻨﻔﻴﺬﻫﺎ ﲝﺪﻭﺙ ﺗﻐﲑﺍﺕ ﻋﻠﻰ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﺇﺿﺎﻓﺔ ﺃﻭ ﺣﺬﻑ ﺃﻭ ﺗﻌﺪﻳﻞ 14 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﻟﻘﻮﺍﺩﺡ { ﺗﻌﺘﱪ ﺍﻟﻘﻮﺍﺩﺡ ﻣﻦ ﺍﻷﺩﻭﺍﺕ ﺍﳍﺎﻣﺔ ﺍﻟﱵ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻦ ﺃﺟﻞ ﺗﻜﺎﻣﻠﻬﺎ ﺍﳌﻌﻄﻴﺎﺕ ﻭﺿﻤﺎﻥ ﻜ ﺻﻴﺎﻧﺔ ﻗﺎﻋﺪﺓ ﳌ ﻄ { ﺗﺴﺘﻄﻴﻊ ﺍﻟﻘﻮﺍﺩﺡ -ﺃﺛﻨﺎﺀ ﺗﻨﻔﻴﺬﻫﺎ -ﺃﻥ ﺗﻘﻮﻡ ﺑﻌﺪﺩ ﻛﺒﲑ ﻣﻦ ﺍﻷﻋﻤﺎﻝ، ﻣﻨﻬﺎ: zﺍﺧﺘﺒﺎﺭ ﺻﺤﺔ ﺗﻌﺪﻳﻞ ﺍﳌﻌﻄﻴﺎﺕ ﻭﺇﻟﻐﺎﺀ ﺍﻟﺘﻌﺪﻳﻞ ﺍﳋﺎﻃﺊ zﻗﺮﺍﺀﺓ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﻋﺪّﺓ ﺟﺪﺍﻭﻝ ﻣﻦ ﻧﻔﺲ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ ﺃﻭ ﻣﻦ ﻗﻮﺍﻋﺪ ﺎﺕ ﳐﺘﻠﻔﺔ ﻣﻌﻄﻴﺎﺕ ﻄ zﺗﻌﺪﻳﻞ ﺍﳉﺪﺍﻭﻝ ﻣﻦ ﻧﻔﺲ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ ﺃﻭ ﻣﻦ ﻗﻮﺍﻋﺪ ﻣﻌﻄﻴﺎﺕ ﳐﺘﻠﻔﺔ zﺗﻨﻔﻴﺬ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﺍﶈﻠﻴﺔ ﻭﺍﻟﺒﻌﻴﺪﺓ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﻘﻮﺍﺩﺡ zﺍﺧﺘﺒﺎﺭ ﺍﻟﻘﻴﻮﺩ ﺍﳌﻌﻘﺪﺓ ﺍﳌﻔﺮﻭﺿﺔ ﻋﻠﻰ ﺍﻷﻋﻤﺪﺓ ،ﻭﺧﺎﺻﺔ ﺍﻷﺳﻄﺮ ﺍﳌﻮﺟﻮﺩﺓ ﺿﻤﻦ ﻧﻔﺲ ﺗﻠﻚ ﺍﻟﱵ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺑﻌﺾ ﻷ ﺍﳉﺪﻭﻝ ﺃﻭ ﺟﺪﺍﻭﻝ ﳐﺘﻠﻔﺔ zﺿﻤﺎﻥ ﺍﻟﺘﻜﺎﻣﻞ ﺍﻟﺘﺎﺑﻌﻲ ﺍﻟﺸﻼﹼﱄ Cascading Referential Integrity zﺗﻮﻟﻴﺪ ﺍﻟﻘﻴﻢ ﺍﻟﺘﻠﻘﺎﺋﻴﺔ ﺍﳌﻌﻘﺪﺓ ﺍﻟﱵ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻣﻌﻄﻴﺎﺕ ﻝ ﺟﺪﺍﻭﻝ ﻣﻮﺟﻮﺩﺓ ﰲ ﻋﺪﺓ ﺃﺃﺳﻄﺮ ﺃﺃﻭ ﺃﺃﻋﻤﺪﺓ ﺃﺃﻭ zﺍﻟﺘﻜﺎﻣﻞ ﺑﲔ ﻋﺪﺓ ﻗﻮﺍﻋﺪ ﻣﻌﻄﻴﺎﺕ zﺇﳚﺎﺩ ﻧﺴﺦ ﻣﻦ ﺍﳌﻌﻄﻴﺎﺕ ﺃﻭ ﻣﻌﻄﻴﺎﺕ ﻣﺸﺘﻘﺔ 15 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺃﻧﻮﺍﻉ ﻭﺧﺼﺎﺋﺺ ﺍﻟﻘﻮﺍﺩﺡ { ﻗﺒﻞﻞ ﻇﻬﻮﺭ ﺍﻹﺻﺪﺍﺭ ،SQL Server 2000ﻛﺎﻧﺖ ﺍﻟﻘﻮﺍﺩﺡ ﺡ ﺍﻟﻼﺣﻘﺔ AFTER Triggersﻫﻲ ﺍﻟﻨﻮﻉ ﺍﻟﻮﺣﻴﺪ ﻣﻦ ﺍﻟﻘﻮﺍﺩﺡ ﺍﳌﺘﺎﺣﺔ ،ﲝﻴﺚ ﱂ ﻳﻜﻦ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺒﺎﺭﺓ " "AFTERﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻘﻮﺍﺩﺡ { ﻭﻗﺪّﻣﺖ ﺍﻷﺩﺍﺓ SQL Server 2000ﻧﻮﻋﹰﺎ ﺟﺪﻳﺪﹰﺍ ﻣﻦ ﺍﻟﺒﺪﻳﻠﺔ INSTEAD ﻋﻠﻴﻬﺎ ﺍﺳﻢ ﻟﺍﻟﻘﻮﺍﺩﺡ ﻟ ﻠ ﻳﻄﻠﻖ ﻠ ﻟﺍﻟﻘﻮﺍﺩﺡ ﻄﻠ OF TRIGGERS ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﻼﺣﻘﺔ AFTER Triggers { ﺗﻌﺘﱪ ﻃﺮﻳﻘﺔ ﻋﻤﻞ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻘﻮﺍﺩﺡ ﺑﺴﻴﻄﺔ ﻣﻦ ﺣﻴﺚ ﺍﻟﻨﻘﺎﻁ ﺍﳍﺎﻣﺔ ﻟﺍﻟﱵ ﻳﻨﺒﻐﻲ ﺃﺃﺧﺬﻫﺎ ﺑﻌﲔ ﻫﻨﺎﻙ ﺑﻌﺾ ﻟ ﻁ ﳌﺍﳌﻔﻬﻮﻡ ،ﺇﻻ ﺃﺃﻥ ﻙ ﺍﻻﻋﺘﺒﺎﺭ ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻡ AFTER Triggers { ﻳﺘﻢ ﺇﻃﻼﻕ AFTER Triggersﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﺪﻳﻼﺕ ﻋﻠﻰ ﺍﳌﻌﻄﻴﺎﺕ ﻭﻟﻜﻦ ﻗﺒﻞ ﺗﺄﻛﻴﺪ ﺗﻠﻚ ﺍﻟﺘﻌﺪﻳﻼﺕ ،ﲝﻴﺚ ﻳﺘﻢ ﺗﺴﺠﻴﻞ ﻛﺎﻓﺔ ﺍﳌﻨﺎﻗﻼﺕ -ﺍﳌﺴﺆﻭﻟﺔ ﻋﻦ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺍﻟﱵ ﻳﺘﻢ ﺗﻄﺒﻴﻘﻬﺎ -ﰲ ﻳﻨﺘﻬﻲ ﺗﻨﻔﻴﺬ ﺳﺠﻞ ﺍﳌﻨﺎﻗﻼﺕ ،ﻭﻟﻜﻦ ﻻ ﻳﺘﻢ ﺗﺄﻛﻴﺪﻫﺎ ﺣﱴ ﻳﻨﺘﻬ ﻣﻠﻒ ﺳﺠﻞﹼ ﺍﻟﻘﺎﺩﺡ ﺑﺎﻟﻜﺎﻣﻞ { ﳝﻜﻦ ﺍﻟﺘﺮﺍﺟﻊ ﻋﻦ ﻛﺎﻓﺔ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺍﻟﱵ ﰎ ﺗﻄﺒﻴﻘﻬﺎ ﻣﻦ ﺧﻼﻝ ﺍﻟﻘﺎﺩﺡ ﺃﻭ ﻣﻦ ﺧﻼﻝ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﱵ ﻗﺎﻣﺖ ﺑﺈﻃﻼﻗﻪ 16 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺇﻧﺸﺎﺀ ﻗﺎﺩﺡ ﻻﺣﻖ ﺘﺤﺩﻴﺩﺩ ﺍﺍﺴﻡ ﺫﻟﻙ ﺍﻟﻘﺎﺩﺡ ﻤﻊ ﺘ ﺩ ﺠﺩﻴﺩ ﻊ ﺇﻨﺸﺎﺀ ﻗﺎﺩﺡ ﺩ ﺩ ﺘﻌﻠﻴﻤﺔﺔ ﺇﻨﺸﺎ ﺘﻠ ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺘﻡ ﺇﻨﺸﺎﺀ ﺍﻟﻘﺎﺩﺡ ﻋﻠﻴﻪ ﻋﺒﺎﺭﺓ AFTERﺘﺩل ﻋﻠﻰ ﻨﻭﻉ ﺍﻟﻘﺎﺩﺡ ﺍﻟﻤﻨﺸﺄ ،ﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻨﻬﺎ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﻠﻘﺎﺌﻴﺔ؛ ﺘﻠﻲ ﺍﻟﻌﺒﺎﺭﺓ AFTER ﻋﺒﺎﺭﺓ ﺘﺩل ﻋﻠﻰ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﻲ ﺴﺘﺅﺩﻱ ﺇﻟﻰ ﺇﻁﻼﻕ ﺍﻟﻘﺎﺩﺡ ،ﺃﻱ ﺇﻤﺎ ﺒﻌﺩ ﺇﻀﺎﻓﺔ ﺴﻁﺭ ﺠﺩﻴﺩ ،ﺃﻭ ﺒﻌﺩ ﺘﻌﺩﻴل ﺴﻁﺭ ﻤﻌﻴﻥ ،ﺃﻭ ﺒﻌﺩ ﺤﺫﻑ ﺴﻁﺭ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﺘﻨﻔﻴﺫﻫﺎ ﻤﻥ ﻗﺒل ﺍﻟﻘﺎﺩﺡ ﺒﻌﺩ ﺇﻁﻼﻗﺔ CREATE TRIGGER trigger_name ON table_name | AFTER {INSERT }UPDATE | DELETE AS Sql_statements ﻋﺪﺩ ﻭﺗﺮﺗﻴﺐ ﺍﻟﻘﻮﺍﺩﺡ { ﻳﺴﻤﺢ ﻛﻞ ﻣﻦ SQL Server 7.0ﻭ SQL Server 2000ﺑﺒﻨﺎﺀ ﺃﻛﺜﺮ ﻣﻦ ﻗﺎﺩﺡ ﺗﻌﺪﻳﻞﻞ ﺃﺃﻭ ﺬﻑ ﺣﺬﻑ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﺇﺿﺎﻓﺔ ﺃﺃﻭ ﺗ ﺪ ﻋﻤﻠﻴﺔ ﺗﻐﺗﻐﻴﲑ ﰲ ﺍﳌ ﻄ ﺎ ﺃﺟﻞ ﻛﻞ ﻠ ﺔ ﻣﻦ ﺃ ﻞ { ﺗﻌﺘﱪ ﻫﺬﻩ ﺍﳋﺎﺻﺔ ﻣﻔﻴﺪﺓ ﰲ ﺑﻌﺾ ﺍﳊﺎﻻﺕ ﺇﻻ ﺃﻬﻧﺎ ﳝﻜﻦ ﺃﻥ ﺗﺆﺩﻱ ﺇﱃ ﺣﺪﻭﺙ ﺑﻌﺾ ﺍﻻﺭﺗﺒﺎﻛﺎﺕ ﺧﺎﺻ ﹰﺔ ﻓﻴﻤﺎ ﻳﺘﻌﻠﻖ ﺑﺘﺮﺗﻴﺐ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ { ﺍﺳﺘﻄﺎﻉ ﺍﻹﺻﺪﺍﺭ SQL Server 2000ﺃﻥ ﻳﺰﻳﻞ ﺑﻌﻀﹰﺎ ﻣﻦ ﺣﺎﻻﺕ ﺍﻻﺭﺗﺒﺎﻙ ﺗﻠﻚ ﻣﻦ ﺧﻼﻝ ﺍﻟﺴﻤﺎﺡ ﺑﺘﻮﺻﻴﻒ ﺃﻭﻝ ﻭﺁﺧﺮ ﻗﺎﺩﺡ ﻳﺘﻢ ﺇﻃﻼﻗﻬﻤﺎ ﻧﺘﻴﺠ ﹰﺔ ﻟﻌﻤﻞ ﻣﻌﲔ ،ﺇﻻ ﺃﻧﻪ ﱂ ﳛﻞ ﺗﻠﻚ ﺍﳌﺸﻜﻠﺔ ﺑﺸﻜﻞ ﺟﺬﺭﻱ ،ﻓﻔﻲ ﺣﺎﻝ ﻭﺟﻮﺩ ﺍﻟﺜﺎﱐ ﺍﻟﻘﺎﺩﺣﲔ ﺍﻟ ﺎ ﺗﻨﻔﻴﺬ ﺍﻟﻘﺎ ﺃﺳﻠﻮﺏ ﻔ ﺬ ﻓﺴﻴﺒﻘﻰ ﺃ ﻠ ﻣﻌﺎ ،ﻓ ﻘ ﺇﻃﻼﻗﻬﺎ ﺎﹰ ﻗﻮﺍﺩﺡ ﻳﺘﻢ ﺇﻃﻼﻗ ﺎ ﺃﺃﺭﺑﻌﺔ ﻗ ﺍ ﻭﺍﻟﺜﺎﻟﺚ ﻏﲑ ﻣﻌﺮﻭﻑ { ﺗُﺴﺘﺨﺪﻡ ﺍﻹﺟﺮﺍﺋﻴﺔ sp_settriggerorderﻹﻋﺪﺍﺩ ﺗﺮﺗﻴﺐ ﺗﻨﻔﻴﺬ ﺍﻟﻘﻮﺍﺩﺡ، ﲝﻴﺚ ﺗﺄﺧﺬ ﺛﻼﺛﺔ ﻣﻌﺎﻣﻼﺕ ،ﻭﻫﻲ: )sp_settriggerorder (action,order_value,trigger_name 17 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺧﻄﻮﺍﺕ ﺗﻨﻔﻴﺬ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻣﻊ ﺍﻟﻘﺎﺩﺡ ﺡ ﺍﻟﺮﺋﻴﺴﻲﻲ ﺍﳌﻌﺮﻓﺔ (١ﻣﻌﺎﳉﺔ ﻗﻴﻮﺩ ﺍﻻﺧﺘﺒﺎﺭ ﻭﺍﻟﺘﻔﺮﺩ ﻭﺍﳌﻔﺘﺎﺡ ﻋﻠﻰ ﺍﳉﺪﻭﻝ (٢ﻣﻌﺎﳉﺔ ﻗﻴﻮﺩ ﺍﻟﺘﻜﺎﻣﻞ ﺍﳌﺮﺟﻌﻲ )ﺍﳌﻔﺎﺗﻴﺢ ﺍﳋﺎﺭﺟﻴﺔ( (٣ﺗﻨﻔﻴﺬ ﺃﻋﻤﺎﻝ ﺍﻟﻘﺎﺩﺡ z z z ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺇﱃ ﺳﺠﻞ ﺍﳌﻨﺎﻗﻼﺕ ﺍﻟﻘﺎﺩﺡ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﺎ ﺗﻨﻔﻴﺬﺬ ﻠ ﺎ ﻔ ﺍﻟﺘﺮﺍﺟﻊ ﻋﻦ ﺍﻟﺘﻌﺪﻳﻞ ﺃﻭ ﺗﺄﻛﻴﺪ ﺍﻟﺘﻌﺪﻳﻞ ﻭﺗﺴﺠﻴﻠﻪ ﰲ ﻗﺎﻋﺪﺓ ﺍﳌﻌﻄﻴﺎﺕ ﻗﻴﻮﺩ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﻼﺣﻘﺔ ﻭﻟﻴﺲ ﻋﻠﻰﻰ ﲑ ﺍﳌﻨﺎﻇﲑ ﺍﳉﺪﺍﻭﻝ ﻭ ﻴﺲ ﻋﻠﻰ ﻭ ﺗﻌﺮﻳﻔﻬﺎ ﻰ ﳝﻜﻦ ﺮ ﻬ { ﻦ { ﻻ ﳝﻜﻦ ﻟﻘﺎﺩﺡ ﺃﻥ ﻳﻮﺿﻊ ﻋﻠﻰ ﺃﻛﺜﺮ ﻣﻦ ﺟﺪﻭﻝ { ﻻ ﳝﻜﻦ ﺃﻥ ﺗﺴﺘﺨﺪﻡ ﺃﻋﻤﺪﺓ ﻣﻦ ﳕﻂ text, ntext, imageﰲ ﺍﻟﻘﻮﺍﺩﺡ ﻳﻜﻮﻥ ﺍﺳﻢ ﻟﺍﻟﻘﺎﺩﺡ ﻓﺮﻳﺪ ﰲ ﻗﺎﻋﺪﺓ { ﳚﺐ ﺃﺃﻥ ﻜ ﺍﳌﻌﻄﻴﺎﺕ 18 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ deleted ﻭinserted ﺍﳉﺪﺍﻭﻝ ﻭinserted ﲔ ﺍﳉﺪﻭﻟﲔ ﻳﻜﻮﻥ ﻭ ﺡﻳ ﻮ ﻛﺘﺎﺑﺔ ﺍﻟﻘﺎﺩﺡ { ﻋﻨﺪ ﺑ : ﻣﻌﺮﻓﲔ ﻭﳛﺘﻮﻳﺎﻥ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﺘﺎﻟﻴﺔdeleted Statement INSERT UPDATE DELETE Contents of inserted Rows added New rows Empty Contents of deleted Empty Old rows Rows deleted ﻣﺜﺎﻝ إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ 19 ﺍﻟﺘﺎﺑﻊ UPDATE ﻋﻤﻮﺩ ﺗﺄﺛﺮ ﻮ ﲟﻌﺮﻓﺔ ﺮ ﻟﻠﻘﺎﺩﺡ ﺮ ﺑﻊ UPDATEﺡ { ﻳﻳﺴﻤﺢﺢ ﺍﻟﺘﺎﺑﻊ ﻣﺎ ﺑﻌﻤﻠﻴﺔ ﺍﻟﺘﻌﺪﻳﻞ ﺍﳉﺎﺭﻳﺔ ﻭﻳﺴﺘﺨﺪﻡ ﻛﻤﺎ ﻳﻠﻲ: { )UPDATE (column_name { ﻭﻳﻌﻴﺪ ﺍﻟﻘﻴﻤﺔ TRUEﰲ ﺣﺎﻝ ﺗﺄﺛﺮ ﺍﻟﻌﻤﻮﺩ ﺑﻌﻤﻠﻴﺔ ﺍﻟﺘﻌﺪﻳﻞ ﺍﻟﻘﻮﺍﺩﺡ ﺍﳌﺘﺪﺍﺧﻠﺔ Nested ﺁﺧﺮ ﻳ ﻢ ﻳﺘﻢ ﺡ ﺮ ﻚ ﻗﺎﺩﺡ ﻭﻻ ﳝﳝﺘﻠﻚ ﺡ ﺟﺪﻭﻻﹰ { ﻋﻨﺪﻣﺎ ﻳﻳﻌﺪّﻝﻝ ﻗﺎﺩﺡ ﻼ ﺗﺸﻐﻴﻞ ﺍﻟﻘﺎﺩﺡ ﺍﻟﺜﺎﱐ ﻭﻳﻌﺘﱪ ﺍﻟﻘﺎﺩﺡ ﺍﻟﺜﺎﱐ ﻣﺘﺪﺍﺧ ﹰ ﻣﻊ ﺍﻷﻭﻝ { ﳝﻜﻦ ﻣﻨﻊ ﺗﺪﺍﺧﻞ ﺍﻟﻘﻮﺍﺩﺡ ﺑﻮﺿﻊ ﻗﻴﻤﺔ ﺍﳋﻴﺎﺭ nested triggersﻋﻠﻰ ﺍﻟﻘﻴﻤﺔ 0 { ﻳﺴﻤﺢ ﲟﺴﺘﻮﻯ ﺗﺪﺍﺧﻞ ﺣﱴ ٣٢ { ﺗﻌﺘﱪ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﻌﻮﺩﻳﺔ ﺣﺎﻟﺔ ﺧﺎﺻﺔ ﻣﻦ ﺍﳌﺘﺪﺍﺧﻠﺔ 20 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﺒﺪﻳﻠﺔ INSTEAD OF Triggers { ﻳﻘﺪﻡ ﺍﻹﺻﺪﺍﺭ SQL Server 2000ﻧﻮﻋﹰﺎ ﺟﺪﻳﺪﹰﺍ ﻣﻦ ﺍﻟﻘﻮﺍﺩﺡ ﻳﻄﻠﻖ ﻋﻠﻴﻬﺎ ﺍﺳﻢ ،INSTEAD OF Triggers ﺗﻮﺳﱢﻊ ﻫﺬﻩ ﺍﻟﻘﻮﺍﺩﺡ ﻣﻦ ﺍﻹﻣﻜﺎﻧﻴﺎﺕ ﺍﳌﺘﺎﺣﺔ ﻟﻠﻘﻮﺍﺩﺡ ﻼ ﻟﻘﻮﺍﺩﺡ ﺍﻟـ AFTERﺍﻟﱵ ﰎ ﺑﺸﻜﻞ ﻋﺎﻡ ﻭﺗﻘﺪﻡ ﺑﺪﻳ ﹰ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﰲ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﺴﺎﺑﻘﺔ ﺒﲑ ﰲ ﺃﺳﻠﻮﺏ ﻮﺏ ﺡ ﺑﺸﻜﻞﻞ ﻛﺒﲑ ﺍﻟﻘﻮﺍﺩﺡ ﻮﻉ ﻣﻦﻦ ﻮ { ﳜﺘﻠﻒ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻋﻤﻠﻪ ﻋﻦ ﺍﻟﻨﻮﻉ ﺍﻟﺴﺎﺑﻖ ،ﲝﻴﺚ ﻳﺘﻢ ﰲ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﺒﺪﻳﻠﺔ - ﻭﻛﻤﺎ ﻳﺒﺪﻭ ﻣﻦ ﺍﲰﻬﺎ -ﺍﺳﺘﺒﺪﺍﻝ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﱵ ﺃﺩّﺕ ﺇﱃ ﺇﻃﻼﻕ ﺍﻟﻘﺎﺩﺡ ﺑﺎﻟﻌﺒﺎﺭﺓ ﺍﳌﻮﺻﻔﺔ ﰲ ﺍﻟﻘﺎﺩﺡ ﻧﻔﺴﻪ ﺇﻧﺸﺎﺀ INSTEAD OF Triggers ﺘﺤﺩﻴﺩﺩ ﺍﺍﺴﻡ ﺫﻟﻙ ﺍﻟﻘﺎﺩﺡ ﻤﻊ ﺘ ﺩ ﺠﺩﻴﺩ ﻊ ﺇﻨﺸﺎﺀ ﻗﺎﺩﺡ ﺩ ﺩ ﺘﻌﻠﻴﻤﺔﺔ ﺇﻨﺸﺎ ﺘﻠ ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﻭل ﺍﻟﺫﻱ ﺴﻴﺘﻡ ﺇﻨﺸﺎﺀ ﺍﻟﻘﺎﺩﺡ ﻋﻠﻴﻪ 21 CREATE TRIGGER trigger_name ON table_name ﻋﺒﺎﺭﺓ INSTEAD OFﺘﺩل ﻋﻠﻰ ﻨﻭﻉ ﺍﻟﻘﺎﺩﺡ ﺍﻟﺫﻱ ﻨﻘﻭﻡ ﺒﺒﻨﺎﺌﻪ ﺘﻠﻲ ﺍﻟﻌﺒﺎﺭﺓ INSTEAD OFﻋﺒﺎﺭﺓ ﺘﺩل ﻋﻠﻰ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﻲ ﺴﺘﺅﺩﻱ ﺇﻟﻰ ﺇﻁﻼﻕ ﺍﻟﻘﺎﺩﺡ ،ﺃﻱ ﺇﻤﺎ ﺒﻌﺩ ﺇﻀﺎﻓﺔ ﺴﻁﺭ ﺠﺩﻴﺩ، ﺃﻭ ﺒﻌﺩ ﺘﻌﺩﻴل ﺴﻁﺭ ﻤﻌﻴﻥ ،ﺃﻭ ﺒﻌﺩ ﺤﺫﻑ ﺴﻁﺭ ،ﺒﺤﻴﺙ ﻴﺘﻡ ﺍﺴﺘﺒﺩﺍل ﺘﻠﻙ ﺍﻟﻌﻤﻠﻴﺔ ﺒﻤﺤﺘﻭﻯ ﺍﻟﻘﺎﺩﺡ ﻤﻥ ﻋﺒﺎﺭﺍﺕ INSTEAD OF | {INSERT | UPDATE }DELETE ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﺘﻨﻔﻴﺫﻫﺎ ﻤﻥ ﻗﺒل ﺍﻟﻘﺎﺩﺡ ﺒﻌﺩ ﺇﻁﻼﻗﺔ AS Sql_statements إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺧﻄﻮﺍﺕ ﺗﻨﻔﻴﺬ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﺒﺪﻳﻠﺔ (١ (٢ { { ﺍﺳﺘﺒﺪﺍﻝ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﱵ ﺃﺩﺕ ﺇﱃ ﺇﻃﻼﻕ ﺍﻟﻘﺎﺩﺡ ﺑﺎﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﱵ ﻫﺬﻩ ﻟﺍﻟﻌﺒﺎﺭﺍﺕ ﺫﻟﻚ ﻟﺍﻟﻘﺎﺩﺡ ﻭﺗﻨﻔﻴﺬﺬ ﺬ ﻳﺘﻜﻮﻥ ﻣﻨﻬﺎ ﻟﻚ ﻜ ﻣﻌﺎﳉﺔ ﺍﻟﻘﻴﻮﺩ :ﺗﺘﻢ ﺑﻌﺪ ﺫﻟﻚ ﻣﻌﺎﳉﺔ ﺍﻟﻘﻴﻮﺩ ﺍﳌﻔﺮﻭﺿﺔ ﻣﻦ ﺍﳌﻔﺎﺗﻴﺢ ﺍﻻﻭﻟﻴﺔ ﺃﻭ ﻗﻴﻮﺩ ﺗﻔﺮﱡﺩ ﺃﻭ ﻗﻴﻮﺩ ﺍﻻﺧﺘﺒﺎﺭ ﰲ ﺣﺎﻝ ﱂ ﻳﻘﻮﻡ ﺍﻟﻘﺎﺩﺡ ﺑﺘﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻌﺪﻳﻞ ) Update, (Delete, Insertﻓﻠﻦ ﺗﺘﻢ ﺍﻟﻌﻤﻠﻴﺔ ﻣﻄﻠﻘﹰﺎ ﺍﻟﺘﻜﺎﻣﻞ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻘﻮﺍﺩﺡ ﻹﳚﺎﺩ ﺷﺮﻭﻁ ﻜ ﻜ ﺍﳌﺮﺟﻌﻲ – ﺣﱴ ﰲ ﺣﺎﻝ ﻋﺪﻡ ﻭﺟﻮﺩﻫﺎ -ﻗﺒﻞ ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻌﺪﻳﻞ ﻣﺜﺎﻝ 22 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﻼﺣﻘﺔ ﺃﻡ ﺍﻟﺒﺪﻳﻠﺔ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﻼﺣﻘﺔ ﺃﻡﻡ ﺡ ﻟﻺﺟﺎﺑﺔ ﻋﻠﻰﻰ ﺍﻟﺘﺴﺎﺅﻝ ﻫﻞﻞ ﺃﺳﺘﺨﺪﻡﻡ ﻺ ﺍﻟﺒﺪﻳﻠﺔ ﻧﻼﺣﻆ ﻣﺎ ﻳﻠﻲ: { ﰲ ﺣﺎﻝ ﻛﱪ ﺍﺣﺘﻤﺎﻝ ﺭﻓﺾ ﺍﻟﺘﻌﺪﻳﻼﺕ ﻳﻔﻀﻞ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﺒﺪﻳﻠﺔ ﻷﻬﻧﺎ ﲣﺘﱪ ﺍﻟﺸﺮﻭﻁ ﻗﺒﻞ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﺪﻳﻞ ﺡ ﺍﻟﻼﺣﻘﺔ ﺗﻜﻮﻥ { ﰲ ﺣﺎﻝ ﺻﻐﺮ ﻫﺬﺍ ﺍﻻﺣﺘﻤﺎﻝ ﻓﺎﻟﻘﻮﺍﺩﺡ ﺃﺳﺮﻉ ﻭﺃﺳﻬﻞ { ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﺒﺪﻳﻠﺔ ﻣﻊ ﺍﳌﻨﺎﻇﲑ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﺩﺡ ﺍﻟﻼﺣﻘﺔ ﻭﺍﻟﺒﺪﻳﻠﺔ ﺳﻮﻳﹰﺎ ﳝﻜﻦ ﺗﻮﺍﺟﺪ ﺍﻟﻨﻮﻋﲔ ﻣﻦ ﺍﻟﻘﻮﺍﺩﺡ ﻋﻠﻰ ﺟﺪﻭﻝ ﻣﺎ ،ﰲ ﻫﺬﻩ ﺍﳊﺎﻟﺔ ﻳﻜﻮﻥ ﺗﺮﺗﻴﺐ ﻟﺍﻟﺘﻨﻔﻴﺬ ﻛﻛﻤﺎ ﻳﻠﻲ ﻜ (١ﻃﻠﺐ ﺗﻌﻠﻴﻤﺔ ﺗﻌﺪﻳﻞ )(Insert, Update, Delete (٢ﺗﺸﻐﻴﻞ ﺍﻟﻘﺎﺩﺡ ﺍﻟﺒﺪﻳﻞ ﻋﻮﺿﹰﺎ ﻋﻦ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﺪﻳﻼﺕ ﰲ ﺳﺠﻞ ﺍﳌﻨﺎﻗﻼﺕ (٣ﻣﻌﺎﳉﺔ ﺍﻟﻘﻴﻮﺩ (٤ﺗﺸﻐﻴﻞ ﺍﻟﻘﺎﺩﺡ ﺍﻟﻼﺣﻖ (٥ﰲ ﺣﺎﻝ ﱂ ﻳﻠﻐﻲ ﺍﻟﻘﺎﺩﺡ ﺍﻟﻼﺣﻖ ﺍﻟﺘﻌﺪﻳﻞ ﻳﺘﻢ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﺪﻳﻼﺕ ﰲ ﺍﻟﻘﺎﻋﺪﺓ 23 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺗﻮﺍﺑﻊ ﺍﳌﺴﺘﺨﺪﻡ User Defined Functions { { { { ﻳﺰﻭﺩﻧﺎ SQL Serverﺑﻌﺪﺩ ﻣﻦ ﺍﻟﺘﻮﺍﺑﻊ ﻣﺴﺒﻘﺔ ﺍﻟﺘﻌﺮﻳﻒ ﻣﻀﻤّﻨﺔ ﰲ ﻟﻐﺔ Transact- ﻹﺟﺮﺍﺀ ﺗﻮﺍﺑﻊ ﻹ ﺍ ﻑ ﺇﱃ ﺗ ﺍ ﺍﶈﺎﺭﻑ ﺳﻼﺳﻞﻞ ﺍﶈﺎ ﺎﳉﺔ ﻼ ﺗﻮﺍﺑﻊ ﳌﳌﻌﺎﳉﺔ ﺎﻬﺗﺎ ﻣﻦ ﺗ ﺍ ﻭﺍﻟﱵ ﲣﺘﻠﻒ ﻣﻬﻤﺎﻬﺗﺎ ،SQLﺍﻟﱵ ﺣﺴﺎﺑﺎﺕ ﺭﻳﺎﺿﻴﺔ ،ﺃﻭ ﺗﻮﺍﺑﻊ ﻹﺟﺮﺍﺀ ﲢﻮﻳﻼﺕ ﰲ ﺃﳕﺎﻁ ﺍﳌﻌﻄﻴﺎﺕ ﻭﻏﲑﻫﺎ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ SQL Serverﻳﺰﻭﺩﻧﺎ ﲟﺠﻤﻮﻋﺔ ﻛﺒﲑﺓ ﻭﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﺘﻮﺍﺑﻊ ،ﺇﻻ ﺃﻧﻨﺎ ﳝﻜﻦ ﺃﻥ ﻧﺘﻌﺮّﺽ ﰲ ﻛﺜﲑ ﻣﻦ ﺍﻷﺣﻴﺎﻥ ﺇﱃ ﺣﺎﻻﺕ ﳓﺘﺎﺝ ﻓﻴﻬﺎ ﻟﺘﺎﺑﻊ ﻣﺎ ﻏﲑ ﻣﻌﺮّﻑ ﰲ ﺗﻠﻚ ﺍﻟﻘﺎﺋﻤﺔ ﻧﺴﺘﻄﻴﻊ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﺃﻥ ﻧﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ ﻣﻌﺎﳉﺔ ﳏﺪﺩﺓ ﺗﻌﻴﺪ ﻧﺘﻴﺠﺔ ﻣﺎ ﻮﺏ ﺍﻟﺘﻌﺎﻣﻞﻞ ﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﳌﺨﺰّﻧﺔ ﳜﺘﻠﻒ ﻋﻦﻦ ﺃﺳﻠﻮﺏ ﺍﺣﺘﻴﺎﺟﺎﺗﻨﺎ ،ﺇﺇﻻ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡﻡ ﻹ ﺮ ﺐ ﻴ ﺗﻨﺎﺳﺐ ﻣﻊ ﺍﻟﺘﻮﺍﺑﻊ ،ﻓﻌﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﻻ ﳝﻜﻨﻨﺎ ﺃﻥ ﻧﺴﺘﺨﺪﻡ ﺍﻹﺟﺮﺍﺀﺍﺕ ﻹﻋﺎﺩﺓ ﻗﻴﻤﺔ ﺛﺎﺑﺘﺔ ﻧﺴﺘﻄﻴﻊ ﻣﻦ ﺧﻼﻝ SQL Server 2000ﺃﻥ ﻧﻘﻮﻡ ﺑﺒﻨﺎﺀ ﺗﻮﺍﺑﻊ ﻣﺴﺘﺨﺪﻡ ﻣﻌﺮّﻓﺔ ﳝﻜﻨﻬﺎ ﺃﻥ ﺗﻌﻴﺪ ﻗﻴﻤﺔ ﺛﺎﺑﺘﺔ ،ﲤﺎﻣﺎ ﻛﻤﺎ ﺗﻌﻤﻞ ﺗﻮﺍﺑﻊ SQL Serverﺍﳌﻀﻤّﻨﺔ .ﻫﺬﺍ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺃﻥ ﺗﻮﺍﺑﻊ ﺍﳌﺴﺘﺨﺪﻡ ﺍﳌﻌﺮّﻓﺔ ﺗﻠﻚ ﳝﻜﻨﻬﺎ ﺇﻋﺎﺩﺓ ﳎﻤﻮﻋﺔ ﺃﺳﻄﺮ ﺿﻤﻦ ﻣﺘﺤﻮﻝ ﻣﻦ ﳕﻂ table ﺃﻧﻮﺍﻉ ﺗﻮﺍﺑﻊ ﺍﳌﺴﺘﺨﺪﻡ ﺗﻮﺍﺑﻊ ﺍﳌﺴﺘﺨﺪﻡﻡ : ﻣﻦ ﻮ ﻊ ﺃﺳﺎﺳﻴﲔ ﻦ ﻴﲔ ﻧﻮﻋﲔ { ﻫﻨﺎﻟﻚ ﻮ ﲔ zﺗﻮﺍﺑﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻮﺍﺣﺪﺓ Scalar Functionsﺍﻟﱵ ﺗﻌﻴﺪ ﻗﻴﻤﺔ ﻭﺍﺣﺪﺓ ﺑﺴﻴﻄﺔ zﺍﻟﺘﻮﺍﺑﻊ ﺍﳉﺪﻭﻟﻴﺔ Table-valued functionsﺍﻟﱵ ﺗﻌﻴﺪ ﻧﻮﻋﲔ : ﻭﻓﻴﻬﺎ ﻮ ﺟﺪﻭ ﹰﻻ ﻭ ﻬ ﻭ {Inline {Multistatement 24 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﺇﻧﺸﺎﺀ ﺗﻮﺍﺑﻊ ﺍﳌﺴﺘﺨﺪﻡ ﺍﳌﻌﺮّﻓﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ T-SQL ﺘﺤﺩﻴﺩ ﺍﺍﺴﻡﻡ ﺫﻟﻙ ﺍﺍﻟﺘﺎﺒﻊ ﺒﻊ ﺠﺩﻴﺩ ﻤﻊﻊ ﻴ ﺘﺎﺒﻊ ﺠ ﻴ ﺘﻌﻠﻴﻤﺔ ﺇﺇﻨﺸﺎﺀﺀ ﺒﻊ ﻴ ﻭﺍﺴﻡ ﻤﺎﻟﻜﻪ ﺘﺤﺩﻴﺩ ﺍﻟﻤﻌﺎﻤﻼﺕ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺘﻤﺭﻴﺭﻫﺎ ﻟﻠﺘﺎﺒﻊ ،ﻤﻊ ﻨﻤﻁ ﻜل ﻤﻨﻬﺎ ]CREATE FUNCTION [owner. ] [owner function_name = [ ([{ @parameter_name scalar_datatype ) ] ] default] } [ , … n ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﻨﻤﻁ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﻴُﻌﻴﺩﻫﺎ ﺍﻟﺘﺎﺒﻊ RETURNS value_datatype ﻟﺘﺸﻔﻴﺭ ﻤﺤﺘﻭﻯ ﺍﻟﺘﺎﺒﻊ ﺃﻭ ﻟﺭﺒﻁﻪ ﻤﻊ ﺃﻏﺭﺍﺽ ﺃﺨﺭﻯ ﻀﻤﻥ ﺍﻟـSchema [ WITH {ENCRYPTION, }SCHEMABINDING ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﺍﻟﺘﺎﺒﻊﻊ ﻭﻋﻥ ﻤﺤﺘﻭﻴﺎﺘﻪ، ﺢ ﻟﻠﻔﺼل ﺒﻴﻥ ﻭﻫﺫﻩ ﺍﻟﻌﺒﺎﺭﺓ ﻟﻴﺴﺕ ﺇﺠﺒﺎﺭﻴﺔ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻥ ﺒﺩﺍﻴﺔ ﺠﺯﺀ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﻜﻭّﻨﺔ ﻟﻠﺘﺎﺒﻊ ﺘﻌﻠﻴﻤﺎﺕ T-SQLﺍﻟﺘﻲ ﻴﺘﻜﻭﻥ ﻤﻨﻬﺎ ﺍﻟﺘﺎﺒﻊ ﻗﻴﻤﺔ ﺍﻟﺨﺭﺝ ﺍﻟﺘﻲ ﻴﻌﻴﺩﻫﺎ ﺍﻟﺘﺎﺒﻊ ][AS BEGIN Sql_statements RETURN value ﻟﻠﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻨﺘﻬﺎﺀ ﺍﻟﺘﺎﺒﻊ END ﺗﻮﺍﺑﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻮﺍﺣﺪﺓ SQL ﺍﻟﺘﻮﺍﺑﻊ ﺍﳌﻀﻤﻨﺔ ﻣﻊﻊ Q Server ﺗﺸﺒﻪ ﻮ ﺑﻊ { ﺒ { ﺗﻌﻴﺪ ﻗﻴﻤﺔ ﻭﺣﻴﺪﺓ Scalar { ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺣﻴﺚ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺗﻌﺒﲑ ﺛﺎﺑﺖ ﻃﻠﺐ ﺍﻟﺘﺎﺑﻊﻊ ﺍﺳﻢ ﺍﳌﺎﻟﻚ ﰲ ﺐ ﺐ ﺫﻛﺮﺮ ﻢ { ﳚﺐ 25 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ ﻣﺜﺎﻝ ﺍﻟﺘﻮﺍﺑﻊ ﺍﳉﺪﻭﻟﻴﺔ ﳎﻤﻮﻋﺔ ﺃﺳﻄﺮﺮ rowset ﺍﻟﺘﻮﺍﺑﻊ ﻮ ﺗﻌﻴﺪ ﻫﺬﻩ ﻮ ﺑﻊ { ﻴ { ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﺘﻮﺍﺑﻊ ﰲ ﻋﺒﺎﺭﺓ FROM { ﺗﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﻜﻠﻤﺔ Tableﰲ ﻋﺒﺎﺭﺓ Return { ﻫﻨﺎﻟﻚ ﻧﻮﻋﲔ ﻣﻨﻬﺎ Inlineﻭ Multistatement 26 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ Inline Table-valued functions ﺑﻊ ﺍﻟﻜﻠﻤﺔ tableﻓﻘﻂ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﻨﻮﻉ ﻣﻦﻦ ﻮ { ﻳﻳﺴﺘﺨﺪﻡﻡ ﻫﺬﺍ ﻮﻉ ﰲ ﻋﺒﺎﺭﺓ returnﺩﻭﻥ ﲢﺪﻳﺪ ﺗﻌﺮﻳﻒ ﺍﳉﺪﻭﻝ { ﺟﺴﻢ ﻫﺬﺍ ﺍﻟﺘﺎﺑﻊ ﳛﺘﻮﻱ ﻋﺒﺎﺭﺓ returnﻭﺣﻴﺪﺓ ﺗﻄﻠﺐ ﺗﻌﻠﻴﻤﺔ select { ﻟﻴﺲ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺫﻛﺮ ﻣﺎﻟﻚ ﺍﻟﺘﺎﺑﻊ ﻋﻨﺪ ﻃﻠﺒﻪ ﻣﺜﺎﻝ 27 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ Multistatement Table-valued functions ﺑﻊ ﺍﳌﻌﺎﺩ ﺗﻌﺮﻳﻒ ﺍﻟﺘﺎﺑﻊ ﺗﻌﻠﻴﻤﺔ Returnﺮﻳ { ﻫﻨﺎ ﲢﺪﺩ ﻴ { ﺟﺴﻢ ﺍﻟﺘﺎﺑﻊ ﳛﺘﻮﻱ ﻋﺪﺓ ﺗﻌﻠﻴﻤﺎﺕ { ﻳﺴﺘﺨﺪﻡ ﻋﻨﺪ ﺍﳊﺎﺟﺔ ﻹﺟﺮﺍﺀ ﻣﻌﺎﳉﺎﺕ ﻣﺎ ﻗﺒﻞ ﺇﻋﺎﺩﺓ ﺍﻟﻘﻴﻤﺔ ﻣﺜﺎﻝ 28 إﻋﺪاد أﺳﺎﻣﺔ أﺣﻤﺪ
© Copyright 2025