SQL Server

مقدمه

كاربرد روز افزون بانك اطلاعاتي  SQL Server مرا بر آن داشت تا مطالبي هر چند كوتاه جهت خوانندگان محترم سايت تهيه نماييم. قبلا از هر چيز لازم به ذكر است كه مطالب ذيل در حد آشنايي بوده و دوستا براي دستيابي به تكنيكهاي بيشتر مي بايست از كتابهاي مرجع و Book online خود SQL Server استفاده نمايند. در مطالب زير كه سلسله وار مباحث SQL Server را مرور خواهيم كرد , سعي شده تا ابتدا مطالب مقدماتي جهت آشنايي آورده شود و سپس اگر عمري باقي بود به مطالب پيشرفته آن بپردازيم. همچنين براي يادآوري خدمت دوستان ابتدا مرور سريعي بر چند دستور SQL كه كاربرد بيشتري دارند خواهيم پرداخت و سپس به SQL Server و مطالب آن خواهيم پرداخت . مطالب زير اكثرا از كتاب Microsoft SQL Server 7.0 Database Implementation Training انتخاب گرديده است . اين كتاب به همراه CD‌آموزش آن به عنوان يك مرجع براي امتحانات مايكروسافت استفاده مي‌شود.

جداول بكار رفته نيز همگي در SQL Server 7.0 در Database Northwind موجود هستند.

منشا اصلی SQL به مقاله Edgar F. Codd تحت عنوان ” مدل رابطه‌ای داده ها برای بانك‌های داده‌ای اشتراكی ” كه در سال 1970 منتشر شد،باز می‌گردد. در دهه 70 گروهی از شركت IBM در شهر San Jose بر روی سیستم پایگاه داده ای (System R) بدون توجه به این مقاله كار می‌كردند و زبان SEQUEL(Structured English Query Language) را به منظور عملیات و بازیابی اطلاعات ذخیره شده در System R ایجاد كردند. اگر چه SQL ناشی از تلاشهای كاد بود اما Donald D. Chamberlin و Raymond F. Boyce را به عنوان طراحان زبان SEQUEL می‌دانند.
سمینارهایی در زمینه تکنولوژی بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطه‌ای جدید برگزار گردید. تا 1976 مشخص بود که IBM طرفدار جدی تکنولوژی بانک اطلاعاتی رابطه‌ای بوده، توجه زیادی نسبت به زبانSQL دارد. تبلیغات در زمینه System/R باعث جذب گروهی از مهندسین در Menlo Park در کالیفرنیا گردید، و این گروه به این نتیجه رسیدند که تحقیقات IBM منجر به یک بازار تجاری برای بانک‌های اطلاعاتی رابطه‌ای خواهد گردید.

در 1977 این گروه شرکتی بنام Inc وRelational Software تاسیس نمودند تا یک DBMS رابطه‌ای بر اساس SQL بسازند. محصولی بنام Oracle در1979 عرضه گردید، و اولین DBMS رابطه‌ای بوجود آمد. به این ترتیب محصول Oracle باعث گردید اولین محصول IBM برای مدت 2 سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای VAx Digital’s اجرا می‌شد که خیلی از کامپیوترهای بزرگ IBM ارزان تر بودند.
امروزه این شرکت با نام Oracle Corporation اولین فروشنده سیستم‌های مدیریت بانک اطلاعاتی رابطه‌ای است. استادان آزمایشگاههای کامپیوتر در دانشگاه برکلی کالیفرنیا نیز در نیمه دهه 1970 مشغول تحقیق در زمینه بانک‌های اطلاعاتی رابطه‌ای بودن (مانند تیم تحقیق IBM)، گروه فوق نیز یک نمونه از DBMS رابطه‌ای ایجاد نمودند و سیستم خود را Ingres نام نهادند.
پروژه Ingres شامل یک زبان پرسش یا Query language بود بنام QUEL، اگر چه از SQL خیلی ساخت یافته تر بود، اما شباهت آن به زبان انگلیسی کمتر بود.
در حالیکه Oracle و Ingres برای ارائه محصولات تجاری در رقابت بودند، پروژه System/R شرکت IBM در تلاش بوده است که یک محصو ل تجاری با نام SQL/Data system (یاSQL/DS) عرضه نماید. IBM موجودیت SQL/DS را در 1981 اعلام، و در 1982 شروع به عرضه محصول خود نمود. در سال 1983 IBM یک نسخه SQL/DS را برای VM/CMS (سیستم عاملی که در کامپیوتر بزرگ IBM غالبا استفاده شده بود)، اعلام نمود.
همچنین در سال 1983 شرکتIBM، محصول Database2 یا DB2 را معرفی نمود که یک DBMS رابطه‌ای بود برای سیستم‌های بزرگ آن شرکت. DB2 تحت سیستم عامل IBM’s VMS(سیستم عامل مراکز کامپیوتری بزرگ) اجرا می‌شد. اولین نسخه DB2در 1985 عرضه گردید، و مسئولین IBM اعلام نمو دند که این محصول یک برنامه استراتژیک برای تکنولوژی نرم افزاری IBM می‌باش DB2 .از آن تاریخ تاکنون DBMS رابطه‌ای شاخص بوده و IBM از آن حمایت نموده و زبان DB2’s SQL استاندارد عملی زبان بانک اطلاعاتی بوده است.
SQL استاندارد (ANSI (American National Standards Institute را در سال 1986 و ISO (International Organization for Standardization) را در سال 1987 اتخاذ نمود. استانداردهای مختلفی از SQL تاكنون عرضه شده كه در جدول زیر بیان می‌كنیم:

SQL-87
SQL-89
SQL-92
SQL:1999
SQL:2003

_______________________________

نویسنده: احمد سلیمان  

پوهنتون: تعلیم تربیه

_______________________________

 واژه‌های كلیدی SQL

واژه‌های كلیدی SQL به گروه‌های مختلفی تقسیم می‌گردد، در زیر به برخی از آنها اشاره می‌كنیم آنهایی كه آشنا تر هستند را تنها با یك مثال شرح می‌دهیم:

  • دستورات باز یابی داده(SELECT)
  • دستورات عملیات داده(INSERT، UPDATE، MERGE،TRUNCAT و DELETE)
  • دستورات تراكنش داده(COMMIT و ROLLBACK)
  • دستورات تعریف داده(CREATE وDROP)
  • دستورات كنترل داده(GRANT و REVOKE)

دستور Select

اين دستور كه دستوري مستقل نيست و حتما بايد با اجزايي بكار رود جهت ساخت پرس و جو بر روي بانك اطلاعاتي بكار مي‌رود و ركوردهايي كه با شرايط اين دستور همخوان باشد به عنوان نتيجه پرس و جو برمي‌گرداند . چهار كلمه كليدي وجود دارند كه بخشهاي ارزشمند اين دستور را تشكيل مي‌دهند :

1- select

2- from

3- where

4- order by

شكل كلي دستور :

Select [*|distinct column1, column2,…]

From table[,table2,…]

Where شرط

Order by نام فيلد يا شماره فيلد

مثال :

Select * from customers

اين دستور تمام ركوردهاي جدول customers را برمي‌گرداند.

كه نتيجه 91 سطر از اطلاعات اين جدول خواهد بود

حال اگر شرط Country =’uk’ اضافه كنيم ، فقط اطلاعات مشتريان انگليس جواب خواهند بود كه به 7 سطر تقليل مي‌يابد.

select * from customers

where Country =’uk’

حال

select City,Country from customers

order by city

فقط ستونهاي نام شهر (city) و نام كشور (Country) را بر گردانده و بر اساس نام شهر مرتب ميكند. دستور بالا با دستور پايين هردو يك جواب را ميدهند :

select City,Country from customers

order by 1

كه 91 سطر بازگردانده خواهد شد . در نتيجه پرس و جو تعدادي سطر تكراري وجود دارد مانند شهر London كه اگر از كلمه Distinct‌ در Select استفاده كنيم اين سطرهاي تكراري حذف خواهد شد .

select distinct City,Country from customers

order by 1

و جواب 69 سطر خواهد بود.

استفاده از توابع در Select

1- Count : تعداد سطرهاي بازگردانده شده توسط select را ميشمارد.

Select Count(*) from Customers

where Country =’uk’

در اصل تعداد مشترياني را ميشمارد كه در كشور انگليس هستند. كه عدد 7 جواب است.

2- Sum : مجموع يك فيلد عددي را برمي‌گرداند.

Select sum(Quantity) from [Order Details]

where productid = 11

مجموع فيلد Quantity را براي فيلدهايي كه شماره محصول آنها ( Productid) برابر 11 است را محاسبه ميكند

نكته 1 : در دستور select مي‌توان از اسم مستعار استفاده كرد ، يعني نام جديدي را براي يك ستون در نظر گرفت به عنوان مثال select قبل را به شكل زير بكار برد :

Select sum(Quantity) as Sum_QTY

from [Order Details]

where productid = 11

كه Sum_QTY يك اسم مستعار براي مجموع است. استفاده از كلمه كليديas ‌اختياري است.

نكته 2 : در دستور select هرگاه اسم فيلدي اسم خاص باشد و يا فاصله بين اسم باشد مثل Order Details كه فاصله بين اسم جدول است حتماُ از علامت براكت [] ميبايست استفاده كرد.

نكته 3 : استفاده از group by :

هنگامي كه از توابع count ‌ و Sum به همراه يك فيلد ديگر در دستور select استفاده مي‌شود از group by استفاده مي‌كنيم .

به عنوان مثال دستور زير جمع مقادير فيلد Quantity را براي هر شماره محصول محاسبه ميكند .

Select productid, sum(Quantity) as sum_qty

from [Order Details]

group by productid

كه نتيجه مانند زير خواهد بود :

productid sum_qty

———– ———–

61 603

3 328

32 297

6 301

41 981

64 740

9 95

12 344

در صورتيكه دستور ordr by 1 بعد از group by استفاده كنيم نتيجه بر اساس كد محصول مرتب خواهد شد.

نكته 4 : دستور where مي تواند خود شامل يك دستور select باشد :

select * from Products

where ProductID in

( select distinct ProductID from [order details] where Quantity >70)

order by ProductID

تنها نكته اي كه مي بايست توجه كرد اين است كه نام فيلدي كه در شرط آورده مي شود حتما در دستور select آورده شود, به عبارت ديگر select درون شرط تنها يك ستون را مي بايست برگرداند .

تمرين : با فرض اينكه دو جدول Products و order details داراي ستون (فيلد) يكسان ProductID هستند , يك دستور Select بنويسيد كه تمام فيلدهايي از Products را نشان دهد كه فيلد ProductID آن با ProductID جدول order details يكي باشد.؟

حل :

Select pr.*

From Products as pr , [order details] as od

Where pr. ProductID = od. ProductID

قابل به ذكر است كه بيش از 90% از كارهايي كه ما برروي جداول انجام مي دهيم با select و تركيبات آن انجام مي شود. لذا بدست آوردن تبحر در نوشتن select ها مي تواند شما را در تهيه برنامه ها ياري كند.

3- Min,max : بيشترين و كمترين مقدار فيلد را در بانك اطلاعاتي بدست مي دهد.

Select min (Quantity)

from [Order Details]

4- Top n : تعداد n سطر اول بانك اطلاعاتي را برمي گرداند.

Select top 5 *

from [Order Details]

5 سطر اول بانك را برمي گرداند.

نكته 3 : در حالت بالا اگر مقدار سطر 5 و 6 يكي باشد فقط سطر 5 جواب خواهد بود براي گريز از اين حالت از شكل زير در اين دستور استفاده ميكنيم :

Select top n with ties *

From table

5- Into

Select * from table1 into table2

اطلاعات table1 را به table2 كپي ميكند. البته table2 بايد از قبل وجود نداشته باشد.

اين دستور خود table2 را ميسازد.

دستور select قويترين و كاربردي ترين دستور در sql است كه خود ماهها نيازمند تمرين و آموزش است . براي اطلاعات بيشتر به books online خود Sql Server مراجع كنيد.

دستور Delete

براي حذف اطلاعات از يك بانك اطلاعاتي استفاده ميشود.

شكل كلي دستور :

Delete table1

Where شرط

مثال :

فرض كنيد جدول authors موجود باشد و فيلد كليد آن au_id باشد. براي حذف 10 سطر اول اين جدول از دستور زير استفاده مي كنيم :

DELETE authors

FROM (SELECT TOP 10 * FROM authors) AS t1

WHERE authors.au_id = t1.au_id

دستور insert

براي اضافه كردن اطلاعات به يك جدول از اين دستور استفاده ميشود.

Insert into table1 (f1,f2,…)

Values (v1,v2,…)

كه f1,f2 نام فيلدها و v1,v2 مقادير آنها ميباشد.

البته ميتوانيد مقادير را نتيجه يك select قرار داد.

مثال :

Insert into table1

Select top 10

From table2

آموزش Enterprise Manager

ميتوان گفت قلب Sql Server است. در Enterprise Manager شما ميتوانيد يك اتصال به سرور Sql برقرار كنيد . table بسازيد. User تعريف كنيد و…..

علامت فلش سبز نمايانگر فعال بودن سرور است.

سرور ميتواند local باشد مانند بالا و يا يك Sqlserver باشد برروي يك سرور . براي ايجاد يك سرور جديد يا به عبارت ديگر وصل شدن client (ويندوز 98) به يك سرور ديگر بر روي يكي Microsoft Sql Server يا SQL Server Group و يا برروي سرور موجود كليك سمت راست كرده و گزينه New Sql Server Registratin را انتخاب كنيد. سپس كليد next را انتخاب كنيد. سپس در منوي بعدي در available Server نام سرور خود را تايپ كنيد . (نام سرور SQL خود را كه برروي ويندوز 2000 خود نصب كرده ايد) و بعد كليد add را فشار دهيد.و گزينه next را انتخاب كنيد.

در پتجره بعد از شما سوال ميكند كه آيا از username ويندوز استفاده كند و يا اينكه از يك username مخصوص خود Sql Server استفاده كنيد. گزينه دوم را انتخاب كرده و سپس Login Name و Password را وارد كنيد. (در حالت پيش فرض sa بعنوان login name و فضاي خالي بجاي Password وارد كنيد.) پس از چند بار فشار كليد next شروع به وصل شدن به Server ميكند. در صورت موفقيت آميز بودن با پيامي اين كار را اطلاع ميدهد.

از ديگر گزينه ها شما بيشترين استفاده را از Databases خواهيد كرد.

به عبارت ديگر هر كار و پروژه ما بعنوان يك Database در سرور sql قرار ميگرد. همه جداول و دستورات مربوط به آنها در اين محل نگهداري مي شود.

با كليك سمت راست برروي Databases و انتخاب New Database… ميتوانيد يك Database جديد براي خودتان بسازيد.

پس از انتخاب نام آن را تاييد كنيد.

هر Database شامل موارد زير است :

1- Diagram : ارتباط جداول را نشان ميدهد.

2- Tables : جداول پروژه را نشان ميدهد.

3- Views : ديدهاي پروژه را نشان ميدهد.

4- Stored Procedure : كدهاي sql مربوط به عملياتهاي روي جداول را نگهداري ميكند.

5- Users : كاربران تعريف شده بر روي اين database را نشان ميدهد.

6- Roles: قوانين دسترسي به جداول و پروسيجرها را نشان ميدهد.

7- Rules : قوانين مربوط به داده ها را در جداول نشان ميدهد.

گزينه هاي 7 به بعد كاربرد آنچناني براي كارهاي ابتدايي ندارند

ايجاد يك جدول جديد :

براي ايجاد يك جدول جديد بروي tables كليك سمت راست كرده و گزينه New Table را انتخاب كنيد. سپس در كادر بعدي نام جدول را انتخاب كنيد. حال فيلدها و نوع آنها را مشخص كنيد .

بعد از مشخص كردن نوع و احتمالاً طول فيلد , بايد مشخص كنيد كه آيا فيلد هميشه مي بايست مقدار داشته باشد و يا مي تواند null باشد. Allow Nulls اگر تيك داشته باشد يعني اينكه اين فيلد مي تواند هيچ مقداري به خود اختصاص ندهد.

تذكر : مقدار null را با فضاي خالي اشتباه نگيريد.

در قسمت Default Value مقدار اوليه براي فيلد وارد كنيد. تا در صورتيكه هيچ مقداري درج نشد آن مقدار درج شود. (در دستور insert )

اگر Identity را تيك بزنيد اين فيلد بشكل خود افزا خواهد شد كه اولا بايد نوع فيلد عددي و ثانيا مقدار گامها در Identity increment مشخص شود. مقدار اوليه آن را هم مي توانيد در Identity Seed قرار دهيد. بدين شكل با اين مقدار شروع و با گامهاي مشخص شده حركت خواهد كرد.

تذكر : هيچ مقداري در اين فيلد نمي توانيد درج كنيد , چراكه خود سيستم اين مقدار را توليد مي كند .

براي مشخص كردن فيلد كليد (يا فيلدهاي كليدي) فيلد(ها) را انتخاب و بر روي علامت كليد بر روي Toolbar كليك كنيد .

تذكر : فيلد كليدي نمي تواند Allow Nulls باشد.

تذكر : براي تعريف index كليك سمت راست كرده و index/keys را انتخاب كنيد .

( در مورد index بطور مفصل صحبت خواهد شد )

ايجاد Stored Procedure :

مانند هر زبان ديگر رويه ها در sqlServer نيز موجود مي باشند. و بكار ميروند. سه رويه insert , Updaet و Delete را مي توانيد براحتي با ويزاردهاي خود SqlServer بسازيد. از اينجا به بعد از واژه SP بجاي رويه استفاده خواهيم كرد.

ابتدا با ساختار كلي SP آشنا شده و سپس به ويزارد موجود خواهيم پرداخت.

براي ايجاد يك SP جديد ابتدا برروي گزينه Stored Procedure كليك سمت راست كرده و گزينه new Stored Procedure… را انتخاب كنيد. در پنچره بعدي شما مي توانيد متن SP را وارد كنيد.

1- نام sp : ابتدا بجاي [PROCEDURE NAME] يك نام براي SP خود در نظر بگيريد. من خود از ساختار زير بدين منظور استفاده ميكنيم : عمليات_نام جدول

عنوان مثال اگر نام جدول Sale و عمليات مورد نظر يك عمليات insert باشد نام SP را Sale_INSERT ميگذاريم. بهتر است نام عمليات با حروف بزرگ تايپ شود . البته بعضي از دوستان از سه حرف عمليات استفاده مي كنند. براي مثال بالا خواهيم داشت :Sale_INS .

2- تعريف پارامترها : براي تعريف پارامترهاي ورودي SP قبل از كلمه كليدي As آنها را داخل پرانتز مشخص كنيد. بدين شكل كه ابتدا علامت @ سپس نام پارامتر بعد فاصله و نوع پارامتر.

تذكر : تمامي متغييرها در SP از ساختار نام متغيير@ پيروي ميكنند.

بعنوان مثال فرض كنيد يك SP داراي دو پارامتر با نامهاي Id از نوع int و Name از نوع Varchar(20) باشد , داريم 🙁 @id int,@name varchar(20))

حال بعد از As دستورات مورد نظر را تايپ ميكنيم :

مثال 1 : SP بنويسيد كه چهار حرف اول فيلد LastName و فيلد FirstName را از جدول Employees انتخاب كند به شرطي كه فيلد LastName با حرف A شروع شود ؟

ابتدا برروي Stored procedure كليك سمت راست كرده و گزينه New stored procedure را انتخاب كرده و خطوط زير را تايپ كنيد. بعضي از دستورات پايين در كادر باز شده موجود هستند كه نيازي به تايپ مجدد آنها نيست .

create Stored Procedure Employees_BROWSE

As

Select substring(Lastname,1,4) as LastNmae,FirstName

From Employees

Where LastName Like ‘%A’

حال بر روي دكمه ok كليك نماييد. حال SP با نام Employees_BROWSE در ليست SP اضافه شده است .

مثال 2 : تمام فيلدهاي Employees را انتخاب كنيد كه فيلد BirthDate در يك بازه تاريخي كه به شكل پارامتر وارد ميشود قرار گيرد ؟

create Stored Procedure Employees_BROWSE2

(@StartDate char(10) , @EndDate char(10))

As

Select *

From Employees

Where BirthDate between @StartDate and @EndDate

حال براي اجراي SP ها در Query Analyzer كافي است بنويسيم : نام Exec SP

بعنوان مثال :Exec Employees_browse

اگر پارامتر داشت مقدار پارامترها را هم مي آوريم :

Exec Employees_Browse2 ‘01/01/1940’ , ‘15/06/1955’

3- تعريف متغيرها : براي تعريف متغيرها مي بايست از كلمه كليدي Declare استفاده كنيم. بعنوان مثال : Declare @myname varchar(50)

متغيير @myname از نوع كاركتري پويا تعريف ميكند.

4- برگرداندن كد خطا : بدين منظور از دستور return @@Error

گرچه هرمقداري را كه بخواهيم مي توانيم با دستور return برگردانيم.

5- تعريف پارامترها كه مقداري را برمي گردانند : براي اين منظور هنگامي كه پارامتر را در ابتداي پروسيجر تعريف ميكنيم بعد از نوع آن از كلمه كليدي output مي كنيم بعنوان مثال :

create Stored Procedure Employees_BROWSE2

(@StartDate char(10) , @EndDate char(10) , @pp varchar(10) output)

As

6- مقدار دهي به متغييرها : به دو روش مي توانيد اين كار را بكنيد يكي با دستور Set و ديگري با دستور Select .

7- دستورات شرطي :مانند ديگر زبانها شما مي توانيد در Sql دستورات شرطي را بكار ببريد. ساختار آن به شكل زير است :

If شرط then دستور

If شرط then

Begin

دستور1

دستور2

end

مثال :

If @Sdate > @Edate set @newDate = @Sdate

8- دستور Set NOCOUNT on : اين دستور از نوشت تعداد سطرهاي برگردانده شده توسط دستورات جلوگيري ميكند. كاربرد مهم آن زماني است كه شما چند كار را پشت سرهم در SP انجام ميدهيد. مثلا يك جدوي موقت ميسازيد و سپس از آن يك تعدادي از فيلدها را با دستور Select انتخاب مي كنيد. اگر اين دستور را در ابتداي SP استفاده نكتيد , هنگامي كه ميخواهيد از آن SP در يك زبان برنامه نويسي استفاده كنيد با خطاي SP هيچ dataset ي برنمي گرداند مواجه خواهيد شد.

تذكر1 : شما مي توانيد يك SP را در يك SP ديگر فراخواني كنيد. براي اين منظور همانطور كه قبلا گفته شد از دستور exec استفاده نماييد.

تذكر 2 : با دستور exec شما مي توانيد يك دستور sql را نيز اجرا كنيد. اين كار زماني بكار مي آيد كه دستور مورد نظر پويا و متغير باشد.

مثال :

Exec (“ select * From Employees Where “+@Shart)

اين شرط ميتواند بر اساس فيلدهاي بانك توليد گردد.

مثال : يك SP بنويسيد كه اختلاف تعداد سفارشاتي كه فيلد ShipCountry آنها France يا German باشد. را برگرداند ؟

create Stored Procedure Order_France_German ( @Outp int output)

as

declare @Count_France int , @Count_German int

select @Count_France = Count(*)

from orders

where ShipCountry = ‘France’

select @Count_German = Count(*)

from orders

where ShipCountry = ‘German’

if @Count_France is null set @Count_France = 0

if @Count_German is null set @Count_German = 0

ايجاد Stored Procedure با استفاده از ويزارد ها:

براي ايجاد SP هاي استاندارد جهت عمليات درج , حذف و ويرايش شما مي توانيد از ويزاردهاي خود SQL استفاده نماييد. با اين ابزار شما قادريد طي چند دقيقه تعداد زيادي SP جهت عملياتهاي گفته شده بر روي جداول خود بسازيد. براي اين منظور در Enterprise Manager بر روي كليد ويزارد كليك نماييد مانند شكل زير :

بعد در پنجره Select Wizard بر رويDatabase كليك و گزينه Create Stored Procedure Wizard را انتخاب نماييد . مانند شكل زير :

در پنجره بعدي به شما خوش آمد گويي مينماييد . برروي كليد Next كليك نماييد.در پنجره بعدي نام Database ي را كه قرار است بر روي جداول آن كار شود انتخاب نماييد و بروي Next كليك نماييد. در پنجره بعدي جداول و عمليات مورد نظري كه مي خواهيد انجام دهيد انتخاب كنيد. در پنجره بعدي نام SP هايي كه سيستم ساخته شما خواهيد ديد. براي ويرايش نام و يا كد هركدام از آنها ميتوانيد آن Sp را انتخاب و كليد Edit را فشار دهيد. در اينصورت شما پنجره اي به شكل زير خواهيد داشت :

حال شما در قسمت Name مي توانيد نام Sp را عوض نماييد.

در قسمت Include in Set Clause شما فيلدهايي از جدول مربوطه كه مي خواهيد مقادير آن به شكل پارامتر براي Sp ارسال شود انتخاب نماييد. اگر Sp شما Update و يا Delete باشد در قسمت Include in Where Clause شما مي توانيد فيلدهايي كه قرار است در شرط (دستور Where) قرار مي گيرند انتخاب نماييد.

تذكر1 : اگر فيلدي از نوع Identity داريد در حالت Insertحتما از قسمت Include in Set Clause خارج كنيد. در غير اينصورت در زمان اجرا با خطا مواجه خواهيد شد.

تذكر2 : SQL فيلد كليدي جدول را در دستور Update در دستور Where خواهد آورد . همچنين شما اين فيلد را از Include in Set Clause خارج كنيد.

در نهايت شما با فشار كليد Finish همزمان اين Sp را خواهيد ساخت.

تا اين قسمت شما با ساخت Sp آشنا شديد. حال براي ويرايش آن نيز كافي است بر روي Sp كليد نموده و در پنجره باز شده كد آن را ويرايش نماييد

آموزش SQL Server (قسمت چهارم)

در ادامه مطالب آموزش SQL حال به بحث ديدها (view) مي پردازيم. ديد در اصل يك جدول مجازي است كه محتوي آن توسط يك پرس و جو تعريف مي گردد. همانند جدول ديد هم داراي سطر و ستونهايي مي باشد. مي توان به موارد زير به عنوان مزاياي ديد اشاره كرد :

ديدها به كاربران اجازه ميدهند تا بر روي داده هايي كه نياز دارند متمركز شوند. بنابر اين داده هاي غير ضروري ميتوان از ديد خارج كرد. ديدها امنيت داده ها را نيز افزايش ميدهند چراكه كاربر فقط داده هايي را مي بيند كه در ديد وجود دارند.

ديدها به كاربران اجازه ميدهند تا داده ها را به روشهاي متفاوت مشاهد نمايند. ديدها ميتوانند براي مبادله داده ها با ساير برنامه هاي كاربردي بكار روند.

ايجاد ديد :

وقتي ديدي را ايجاد ميكنيد نام آن مي بايست در بين نام جداول و ديگر ديدهايي كه كاربر مورد نظر آنها را ساخته , يكتا باشد.در SQL Server 7.0 شما امكان ايجاد شاخص بر روي ديدها را نداشتيد , ليكن اين امكان در SQL 2000 اضافه شده است.

مراحل ايجاد يك ديد :

1- erprise Manager را باز كرده و بر روي Databases كليك كرده و پايگاه داده اي را كه مي خواهيد ديد در آن ايجاد كنيد . باز كنيد.

2- روي Views كليك راست كرده و سپس گزينه New View… را انتخاب كنيد.

3- در پنجره بعدي كليك سمت راست كرده و گزينه Add Table… را انتخاب كنيد.

4- دكمه هاي Table و يا Views جدول و يا ديد هاي مورد نظر را انتخاب نماييد. و بر روي دكمه Add كليك نماييد. اين كار را براي تمام جداول و يا ديدهاي مورد نظر تكرار كنيد و سپس بر روي دكمه Close كليلك نماييد.

در قسمت Column از پانل مشبك , ستونهايي را كه ميخواهيد در ديد به آنها ارجاع نماييد انتخاب كنيد. اگر ميخواهيد ستوني در مجموعه نتيجه ديده شود گزينه Output متناظر با آن مي بايستي حتما تيك داشته باشد.

در ستون Criteria شرط را بنويسيد. چند شرط را ميتوانيد در ستونهاي OR تكرار كنيد. براي گروه بندي برروي ستون Criteria كليك سمت راست كرده و گزينه Group By را انتخاب نماييد. در اينصورت شما قادر خواهيد بود از توابعي همچون Sum استفاده كنيد.

تذكر : اگر Group by را انتخاب كرده باشيد. تمام شرايط كه در ستون Criteria بنويسيد به عنوان شرايط Having در نظر گرفته ميشوند. براي اينكه اين محدوديتها به شرط Where اضافه گردند , بر روي پانل مشبك متناظر كليك كرده و از ليست مورد نظر گزينه where را بجاي Group by انتخاب كنيد.

تذكر 2 : در ستون Alias شما ميتوانيد يك اسم مستعار براي اين ستون در نظر بگيريد.

براي ديدن نتايج ديد بر روي علامت (!) كليك نماييد.

توجه داشته باشيد كه ارتباط ها در صورتي برقرار ميشود كه كليدهاي خارجي بر روي جداول وجود داشته باشد. گرچه شما مي توانيد با انتخاب فيلد مورد نظر و حركت ماوس در حاليكه كليك سمت چپ را فشار داده ايد مابين دو جدول ارتباط را برقرار كنيد.

عبارت SELECT

پايه و اساس همه داده های رابطه ای در محيط SQL Server يک حالت Transact-SQL تنها است که عبارت Select می باشد. در اين درس ما به مهمترين ترکيبات حالت Select و راههای استفاده کردن از Query Designer برای ساختن خودکار عبارت می پردازيم. با استفاده از Query Designer شما می توانيد يک عبارت Select را مستقيماً در قاب SQL وارد سازيد يا با داشتن Query Designer آن را به وسيله قابهای Grid و Diagram بسازيد. گزينه ها متقابلاً منحصر به فرد نمی باشند. شما می توانيد يک Query را به وسيله اضافه کردن جداول برای قاب Diagram ، تغيير نام ستون با استفاده از قاب Grid شروع کنيد و دستورات را به طوری که سطرها برگردانده می شود به وسيله وارد کردن شرط ORDER BY به صورت مستقيم در قاب SQL مشخص کنيد.

تمرينهای درس يک گونه ای از تکنيکها را به شما نشان خواهد داد. موقعی که خودتان کار می کنيد شما می توانيد يکی را که در زمان ساده تر به نظر می رسد را انتخاب کنيد.

شناختن عبارت SELECT

ساختار دستور عبارت Select خيلی پيچيده می باشد که دارای چندين شرط و اپراتور می باشد اما ساختار اصلی کاملاً ساده می باشد.

Select [ Top n [PERCENT] ] Column-List

From Source-List

[ Where Search-Condition ]

[ ORDER By Expression ]

فقط اولين و دومين شرط از عبارت Select مورد نياز می باشد. اولين شرط، Select Column-List مشخص می کند ستونهايی که به وسيله Query بازگردانده خواهد شد. ليست Column می تواند شامل ستونهای اصلی از جداول و نماهايی باشد که بر روی Query پايه ريزی شده است يا اينکه می تواند شامل ستونهای محاسباتی اقتباس شده از ستونهای اصلی باشد. دومين شرط، From Source-LIST ، نماها و جداول را که در Query پايه ريزی شده مشخص می کند.

انتخاب کردن تمام ستونها

ساده ترين شکل از عبارت Select آن انتخابی است که همه ستونها از يک جدول تکی را انتخاب می کند. با بيشترين نسخه های زبان SQL ، Transact-SQL اجازه می دهد به شما به استفاده از (*) به عنوان يک Shorthand برای مشخص کردن تمام ستونها، بنابراين اين فرم ساده از عبارت اين چنين است:

SELECT *

FROM Table-Name

انتخاب همه ستونها

1- Query Designer را برای Properties Table به وسيله کليک راست کردن نام آن در قاب Detail Enterprise Manager باز می کنيم، روی زير منوی Open Table رفته و Return All Rows را انتخاب می کنيم. SQL Server ، Query Designer را برای جدول باز می کند.

2- قاب SQL را به وسيله کليک کردن دکمه قاب SQL روی نوار ابزار Query Designer راه می اندازيم. Query Designer قاب SQL را نشان می دهد.

3- عبارت SQL را برای نشان دادن همه ستونها از جدول Oils تغيير می دهيم.

4- دکمه Run را روی نوار ابزار Query Designer برای به اجرا در آوردن Query کليک می کنيم. Query Designer همه رکوردها در جدول Oils را نشان می دهد.

راهنمايی: شما می توانيد بيشتر سطرها را در قاب Results به وسيله درج کردن درايور قاب بين قابها نشان دهيد.

 

انتخاب زير مجموعه از ستونها

اگر چه ساختار دستور Select * آسان و سريع می باشد، شما اغلب بيشتر می خواهيد که Query تان فقط به ستونهای انتخاب شده باز گردد. اين با مشخص کردن ستونها در Column-List از شرط Select به انجام می رسد.

 انتخاب ستونها با استفاده از قاب SQL

1- علامت * را در عبارت Select با تايپ کردن نام ستون Oil Name جايگزين می کنيم.

2- دکمه Run را روی نوار ابزار Query Designer برای به کار بستن Query کليک می کنيم. Query فقط ستون Oil Name را نشان می دهد.

انتخاب ستونها با استفاده از قاب Diagram

1- قاب SQL را پنهان کرده و قاب Diagram را به وسيله کليک کردن دکمه ها در نوار ابزار Query Designer نشان می دهيم.

2- فيلد LatinName را در قاب Diagram کليک کرده Query Designer قاب Results به جهت اينکه زياد معتبر نيست کم نور نشان می دهد.

3- دکمه Run را برای به کارگيری Query کليک کرده Query Designer هر دو ستون Latin Name و Oil Name را در قاب Results نشان می دهد.

 

ايجاد کردن نام مستعار ستون

به طور پيش فرض، يک ستون در يک Query نام يکسان دارد که در جدول يا نمای مورد نظر می باشد. اگر چه اغلب تغيير دادن نام آن مفيد می باشد. نامتناسب به نظر می رسد که فيلد به کاربر بدين صورت ( “My Long Column Name With No Spaces” ) يا اينکه به طور خلاصه اين چنين 32713 PK-Varchar-50-Col نشان داده شود. عبارت Select به شما اجازه می دهد که يک ستون را در Query به وسيله ايجاد يک alias تغيير نام دهيد. نام مستعار، نام ستون را در Query تغيير می دهد نه در جدول.

ايجاد يک نام مستعار برای ستون با استفاده از قاب Grid

1- قاب Diagram را پنهان کرده و قاب Grid را به وسيله کليک کردن دکمه ها روی نوار ابزار Query Designer نشان می دهيم.

2- يک نام مستعار برای ستون OilName به وسيله تايپ کردن OilName در فيلد alias ايجاد می کنيم. Query Designer به طور خودکار در اطراف alias پرانتز اضافه کرده زيرا alias شامل يک فضا می باشد.

راهنمايی: پرانتزهای چهارگوش در خروجی Query نشان داده نخواهند شد. آنها به نحوه آسان به SQL Server می گويند که با عبارت “Oil Name” به عنوان يک نام مجزا برخورد کنيم. پرانتزها فقط موقعی مورد نياز می باشند که نام مستعار شامل يک جای خالی باشد، اما آنها می تواند برای نام هر ستون استفاده شود.

3- دکمه Run را روی نوار ابزار Query Designer برای مجدد به کار بستن Query کليک می کنيم. SQL Server نام را در سر ستون با جای خالی اضافه شده بين دو کلمه نشان می دهد.

 

ايجاد نام مستعار ستون با استفاده از قاب SQL

1- قاب Grid را پنهان کرده و قاب SQL را به وسيله کليک کردن دکمه ها در نوار ابزار Query Designer نشان می دهيم.

2- [ Latin Name ] را به عنوان نام مستعار برای دومين ستون اضافه می کنيم.

3- دکمه Run را روی نوار ابزار Query Designer برای به کارگيری Query کليک می کنيم. Query Designer نام را در سر ستون با يک فضای خالی بين دو کلمه نشان می دهد.

 

ايجاد کردن ستونهای محاسباتی

علاوه بر اينکه ستونها به طرز ساده اطلاعات را در جداول Underlying و نماها نشان می دهد، همچنين Query تان می تواند شامل ستونهايی باشد که محاسبه شده اند بر اساس داده های Underlying ، توابع SQL Server يا هر ترکيب دوتايی. ستون محاسباتی به وسيله مشخص کردن يک عبارت به عنوان ستون ايجاد می گردد.

ما به عبارات Transact-SQL در Detail در درس 21 “The Transact-SQL Language” می پردازيم. بنابراين در اين تمرين ما فقط يک جفت از عبارات ساده که بر اساس اپراتور الحاق رشته Transact-SQL که دو رشته و تابع GETDATE را که داده ها و زمان سيستم جاری را باز می گرداند اضافه می کنيم.

ايجاد کردن يک ستون محاسباتی با استفاده از قاب Grid

1- قاب SQL را پنهان کرده و قابGrid را به وسيله کليک کردن دکمه روی نوار ابزار Query Designer نشان می دهيم.

2- در هر سل ستون خالی در قاب Grid کليک کرده و Oil Name +’ – ‘+ Latin Name را تايپ می کنيم.

راهنمايی: شما می توانيد سل ها را در قاب Grid به وسيله درج کردن خطوط تقسيم بين سر ستونها عريض تر سازيد.

3- کليد Tab را فشار می دهيم. SQL Server ، 1 Expr را به عنوان نام مستعار ستون پيشنهاد می دهد.

4- نام مستعار را برای Extended Name تغيير می دهيم.

5- دکمه Run را برای به کارگيری مجدد Query کليک می کنيم. Query Designer ستون جديد را در قاب Results نشان می دهد.

ايجاد کردن يک ستون محاسباتی با استفاده از قاب SQL

1- قاب Grid را پنهان کرده و قاب SQL را به وسيله کليک کردن دکمه ها روی نوار ابزار Query Designer نشان می دهيم.

2- GETDATE را به عنوان [ Today’s Data ] برای ليست ستون از شروط Select اضافه می کنيم.

راهنمايی: کاما را قبل از GETDATE فراموش نکنيد.

3- دکمه Run را در نوار ابزار Query Designer برای به کارگيری مجدد Query کليک می کنيم. SQL Server تاريخ جاری در هر سطر را نشان می دهد.

استفاده کردن از شرط Top n

زمانی که شما دستور Return Top را از منوی متن جدول انتخاب می کنيد. SQL Server شرط Top n را در پايين پوششها برای ايجاد صفحه نمايش در Query Designer استفاده می کند. علاوه بر اينکه يک شماره مشخصی از سطرها را مشخص می کنيد شما می توانيد همچنين يک درصد از سطرها را به وسيله استفاده کردن از شرط Top n Percent نشان دهيد. همان طوری که شما ممکن است انتظار داشته باشيد درصدی از سطرهای مشخص شده را باز می گردانيم.

نشان دادن سطرهای Top s

1- Top 5 را قبل از اولين کلمه در Column-List از شروط Select در قاب SQL اضافه می کنيم.

2- دکمه Run را در نوار ابزار Query Designer برای به کارگيری مجدد Query کليک می کنيم. SQL Server فقط 5 سطر اول را نشان می دهد.

 

نشان دادن Top 5 درصد از سطرها

1- کلمه Percent را بعد از Top 5 در قاب SQL اضافه می کنيم.

2- دکمه Run را در نوار ابزار Query Designer برای به کارگيری Query کليک می کنيم. SQL Server فقط 5 درصد اول از سطرها را در SQL Server نشان می دهد.

شناخت عبارت INSERT

ساختار دستور عبارت Insert شبيه به عبارت Select می باشد، بيشترين شکل مبنای آن عبارت است از:

INSERT [INTO] Table-or-View [(Column-List)]

VALUES (Value-List)

هر عبارت Insert می تواند يک جدول يا نما منفرد را به هنگام سازد. زمانی که شما از عبارت Insert برای به هنگام سازی يک نما استفاده می کنيد شما بايد آگاه باشيد از محدوديتهای زير:

View نبايد شامل يک تابع به هم پيوسته مانند COUNT يا AVG باشد.

View نبايد شامل Top ، GROUP BY ، UNION يا DISTINCT باشد.

View نبايد شامل يک ستون محاسبه شده باشد.

View بايد يک جدول را در شرط From باز گرداند.

عبارت Insert ستونهاي يک جدول منفرد را فقط به هنگام می سازد.

ليست ستون در عبارت Insert اختياری می باشد. اگر آن فراهم نگردد عبارت Insert بايد شامل مقاديری برای همه ستونها در جدول يا نما باشد و آنها بايد به همان ترتيب به عنوان ستونهايی در جدول يا نما فراهم شوند. اگر چه شما می توانيد از کليدهای ويژه DEFAULT برای مشخص کردن مقادير پيش فرض برای يک سطر استفاده کنيد. زمانی که ليست ستون گنجانده می شود. آن يک فرمت شبيه از ليست ستون در عبارت Select می گيرد: يک ليستی از نامهای ستون که با کاما جدا شده است. از زمانی که يک عبارت Insert می تواند يک سطر را فقط برای يک جدول اضافه کند، شما معمولاً نياز به استفاده کردن مشخصه نام جدول برای نام ستون نخواهيد داشت.

 

استفاده کردن از عبارت INSERT

يک عبارت Insert می تواند با استفاده کردن از قاب Grid برای مشخص کردن ستونها يا با استفاده کردن قاب SQL برای وارد کردن مستقيم عبارت ايجاد گردد.

 

درج کردن سطرها با استفاده از قاب Grid

قاب Grid احتمالاً آسانترين راه برای ايجاد يک عبارت Insert می باشد از زمانی که ياد آوردن هر ساختار دستور مورد درخواست شما نباشد.

 

درج کردن يک سطر با استفاده از قاب Grid

پوشه Tables را از پايگاه داده Aromatherapy راهبری کرده، جدول Oils را در قاب Details کليک راست می کنيم. در زير منوی Open Table رفته و Query را انتخاب می کنيم. Query Designer همه چهار قاب نشان داده شده را باز می کند.

آموزش SQLserver (بخش ششم)

شناخت عبارت INSERT

ساختار دستور عبارت Insert شبيه به عبارت Select می باشد، بيشترين شکل مبنای آن عبارت است از:

INSERT [INTO] Table-or-View [(Column-List)]

VALUES (Value-List)

هر عبارت Insert می تواند يک جدول يا نما منفرد را به هنگام سازد. زمانی که شما از عبارت Insert برای به هنگام سازی يک نما استفاده می کنيد شما بايد آگاه باشيد از محدوديتهای زير:

View نبايد شامل يک تابع به هم پيوسته مانند COUNT يا AVG باشد.

View نبايد شامل Top ، GROUP BY ، UNION يا DISTINCT باشد.

View نبايد شامل يک ستون محاسبه شده باشد.

View بايد يک جدول را در شرط From باز گرداند.

عبارت Insert ستونهاي يک جدول منفرد را فقط به هنگام می سازد.

ليست ستون در عبارت Insert اختياری می باشد. اگر آن فراهم نگردد عبارت Insert بايد شامل مقاديری برای همه ستونها در جدول يا نما باشد و آنها بايد به همان ترتيب به عنوان ستونهايی در جدول يا نما فراهم شوند. اگر چه شما می توانيد از کليدهای ويژه DEFAULT برای مشخص کردن مقادير پيش فرض برای يک سطر استفاده کنيد. زمانی که ليست ستون گنجانده می شود. آن يک فرمت شبيه از ليست ستون در عبارت Select می گيرد: يک ليستی از نامهای ستون که با کاما جدا شده است. از زمانی که يک عبارت Insert می تواند يک سطر را فقط برای يک جدول اضافه کند، شما معمولاً نياز به استفاده کردن مشخصه نام جدول برای نام ستون نخواهيد داشت.

استفاده کردن از عبارت INSERT

يک عبارت Insert می تواند با استفاده کردن از قاب Grid برای مشخص کردن ستونها يا با استفاده کردن قاب SQL برای وارد کردن مستقيم عبارت ايجاد گردد.

درج کردن سطرها با استفاده از قاب Grid

قاب Grid احتمالاً آسانترين راه برای ايجاد يک عبارت Insert می باشد از زمانی که ياد آوردن هر ساختار دستور مورد درخواست شما نباشد.

درج کردن يک سطر با استفاده از قاب Grid

پوشه Tables را از پايگاه داده Aromatherapy راهبری کرده، جدول Oils را در قاب Details کليک راست می کنيم. در زير منوی Open Table رفته و Query را انتخاب می کنيم. Query Designer همه چهار قاب نشان داده شده را باز می کند.

ايجاد کردن شئی های جدول

در درسهای گذشته، شما آموختيد که چگونه خصوصيات گوناگون از قبيل مقادير پيش فرض و Check Constraints برای ستونهای خاص از يک جدول تخصيص دهيم. بعضی مواقع اگر چه، يک نوع خاص از ستون در چندين جدول مختلف استفاده می گردد. در اين وضعيت، آن اغلب مفيد می باشد به ايجاد Properties در يک جای جداگانه به طوری که آنها را برای هر جدول به کار ببريم.

پيش فرضها، نقشها و انواع داده تعريف شده کاربر مکانيزمی را برای ايجاد و نگهداری اين شئی ها در يک مکان جداگانه فراهم می آورند. برای مثال شما يک مدل پايگاه داده برای جوابگويی به ارزيابی مشتری می سازيد. شما در ابتدا تصميم می گيريد که مقدار پيش فرض برای هر سؤالی که جواب داده نشده بايد Unknown”” شوند. اگر شما يک پيش فرض ايجاد کنيد و پيش فرضها را برای ستون مناسب پيوند دهيد. شما می توانيد بعداً پيش فرض را به Unanswered تغيير دهيد. بدون هيچ تغييری هر ستون، آن پيش فرض را استفاده می کند.

شناخت پيش فرضها

توابع پيش فرض از همان راهی که خصوصيات پيش فرض که شما مشخص می کنيد زمانی که شما يک ستون در Table Designer ايجاد می کنيد آنها مقاديری هستند که به طور خودکار به وسيله SQL Server تخصيص داده می شوند. اگر کاربر يک مقدار را زمانی که سطری را ايجاد می کند مشخص نکند. اگر چه پيش فرض، شئی های سطح پايگاه داده می باشند که می تواند برای چندين ستونها به کار برده شوند.

ايجادکردن پيش فرضها

از موقعی که پيش فرض، شئی های مستقل در داخل پايگاه داده هستند، شئی بايد پيش فرض را ايجاد کند قبل از اينکه شئی بتواند آن را برای يک ستون جدول متصل سازد.

ايجاد کردن يک پيش فرض

1- پوشه Defaults را از پايگاه داده Aromatherapy از درختConsole جستجو می کنيم. SQL Server يک ليستی از Default ها را در قالب Details نشان می دهد. (چيزی در پايگاه داده Sample وجود ندارد).

2- دکمه Newرا کليک کرده، SQL Server کادر محاوه اي Default Properties را نشان می دهد.

3- در فيلدName ، Default Unknown را تايپ مي کنيم.

4- “Unknown” را در فيلد Value تايپ می کنيم.

5- OK را کليک کرده،SQL Server پيش فرض را ايجاد می کند.

ربط دادن يک پيش فرض به يک ستون

1- پوشهTables را راهبری کرده، Table Designer را برای جدول Oil با کليک راست کردن نام جدول در قاب Details باز کرده و Table Design را انتخاب می کنيم.

2- يک ستون جديد برای جدولی که Sample ناميده شده اضافه می کنيم. انواع داده پيش فرض را پذيرفته و طول آن به وسيله SQL Server پيشنهاد می گردد.

3- فيلد Default Valve را برای ستون کليک کرده و سپس dbo.DefaultUnknown را از ليست انتخاب می کنيم.

4- دکمه Save را کليک کردهSQL Server جدول را ذخيره می کند.

قطع پيوند يک پيش فرض

1- اگر Table Designer برای جدول Oilsاز تمرين قبل باز نيست، آن را به وسيله کليک راست کردن نام جدول در قاب Pet ail> باز کرده و Design Table را انتخاب مي کنيم. SQL Server، Table Disdainer را باز مي کند.

2- ستون Sampleرا انتخاب کرده، Table Designerخصوصيات اين ستون را نشان می دهد.

3- dbo.DefaultUnknown را در فيلد Default Value انتخاب کرده و کليد Delete را برای برداشتن مقدار فشار می دهيم.

4- دکمه Save راکليک کرده SQL Server تغييرات برای تعريف ستون را ذخيره می سازد.

شناخت نقشها

نقشها مانند پيش فرضها سطوح شئی های پايگاه داده می باشند که می تواند برای ستونها در جداول چندگانه به کار برده شوند. يک نقش Check Constraint موجود می باشد که مشخص می کند مقادير داده ها در يک ستون مورد قبول می باشند، اما استفاده از آن بيشتر محدود شده است. يک ستون می تواند چندين Check Constraintداشته باشد که برای آن به کار برده می شود.

راهنمايی: مايکروسافت نقشها و توصيه ها را که با Check Constraint جايگزين می شود را درست نمی داند. اگر چه نقشها هنوز جايگاهشان را در پايگاه داده هایSQL Server دارند از زمانی که فقط يک وظيفه بتواند برای نوع داده هايی که به وسيله SQL Server تعريف شده به کار برده شود.

برخلاف Check Constraint ، يک نقش نمی تواند مبنايی برای يک ستون به طور مستقيم باشد. در عوض، مقاديری که يک نقش به کار می برد به نقشی که در يک متغيری که فرمت@Variable Name مي گيرد داده می شود. در مورد متغيرها در Detail در فصل 24 بحث خواهيم کرد.

ايجاد کردن نقشها

از زمانی که نقشها مانند Defaults مستقل از شئی های پايگاه داده می باشند، شما بايد آنها را قبل از اينکه شما بتوانيد آنها را برای يک ستون در جدول به کار ببريد ايجاد کنيد.

ايجاد يک نقش

1– پوشه نقش را از پايگاه داده در درخت Console راهبری کرده SQL Server يک ليستی از نقشها در پايگاه داده نشان می دهد. (ليست در پايگاه داده Sample خالی می باشد)

2- دکمه New را کليک کردهSQL Server کادر محاوره ای را باز می کند.

3- Sample Rule را به عنوان نام نقش تايپ می کنيم.

4- LEN(@Fldalue)>3 را به عنوان متن نقش تايپ می کنيم.

راهنمايی: به خاطر داشته باشيد LEN يک تابعTransact SQL می باشد که تعدادی از کاراکترها را در يک متن رشته ای برمی گرداند و اينکه @ قبل از يک بر چسب عبارتTransact SQL يک متغيــر را نشان می دهد، يک مقدار که برای عبارت داده می شود. بنابراين در اين حالت نقش Trueمی گردد اگر طول ستون بزرگتر از 3 باشد.

5-OK را کليک کرده، SQL Server کادر محاوره ای Rule Properties را می بندد و نقش را ايجاد می کند.

ربط دادن يک Rule به يک ستون

1- کادر محاوره ای Rule Properties را برایSample Rule به وسيله دابل کليک کردن نام Rule در قاب Details باز می کنيم. SQL Server کادر محاوره ای Rule Properties را نشان می دهد.

2- ستونBind را کليک کرده SQL Server کادر محاوره ایBind Rule to Columns را نشان می دهد.

3- [dbo].[Oils] را درTable Combo Box انتخاب می کنيم.SQL Server فيلدها را در جدول Oils نشان می دهد.

4- ستون Sample را در ليست Unbound Columns انتخاب کرده و سپس Add را کليک می کنيم. SQL Server ستون را به ليست Bound Columns حرکت می دهد.

5- SQL Server کادر محاوره ايBind Rule to Columns را می بندد.

6-OK را مجدداً برای بستن کادر محاوره ای Rule Properties کليک می کنيم.

شناخت User-Defined Data Types

نقشها و پيش فرضها مکانيزم مفيدی برای نگهداری محدوديتهای پايگاه داده ها می باشند، اما SQL Server حتی مکانيزم قوی تری در User-Defined Data Typesها فراهم می آورد. User-Defined Data Types بر مبنای هيچ نوع از پايگاه داده حقيقی مشخص نمی گردد و شامل مشخصاتی از طول ستون می باشد. به طور کلی نقشها و پيش فرضها ممکن است به طور انتخابی برای يکUser-Defined Data Types به کار برده شوند. زمانی که يک ستون بر مبنای يک User-Defined Data Typesايجاد می گردد، ستون جدول همه خصوصيات مشخص شده را برای آن نمونه به ارث خواهد برد. زمانی که مشخصات از User-Defined Data Typesتغييرمی يابد،نقشها برای ستونها بر اساس آن نمونه همچنين تغيير خواهد کرد.

راهنمايی: اگر يک User-Defined Data Type در پايگاه داده Model ايجاد گردد، همه پايگاه داده جديد به طور خودکار به آن نوع دسترسی خواهد داشت.

ايجادکردن User-Defined Data Types

User-Defined Data Types از شئی های پايگاه داده مستقل می باشند و بايد در داخل پايگاه داده تعريف شوند قبل از اينکه آنها بتوانند به ستونها تخصيص داده شوند.

ايجاد کردن يک User-Defined Data Types

1- پوشه User-Defined Data Types را از پايگاه داده Aromatherapy راهبری می کنيم. SQL Server يک ليستی ازUser-Defined Data Types را نشان می دهد (چيزی در پايگاه داده Sample وجودندارد).

2- دکمه New را کليک کرده SQL Server کادر محاوره اي User-Defined Data Types را نشان می دهد.

3- MySample را به عنوان نام User-Defined Data Types تايپ می کنيم.

4- نوع داده پايگاه را varchar و طول آن را 20 قرار می دهيم.

5- Dbo.Sample Rule را در Rule Combo Box انتخاب می کنيم.

6- مقادير پيش فرض برای Allow Nulls و گزينه های پيش فرض را می پذيريم و OKرا کليک می کنيم. SQL Server ، User-Defined Data Types را ايجاد می کند.

تخصيص يک ستون برای يک User-Defined Data Types

1- Table Designer را برای جدول Oils به وسيله کليک راست کردن نام آن در قاب Details باز می کنيم و Details Table را انتخاب می کنيم. SQL Server ، Table Designer را باز می کند.

2- ستون Sample را انتخاب کرده وMySample را از Data Type Combo Boxرا انتخاب می کنيم. Data Type , SQL Server را برای MySampleقرار می دهد.

راهنمايی: User-Defined Data Types در پايين ليست Data Type می باشد.

3- دکمهSave را کليک کردهSQL Server جدول را با تعريف جديد ذخيره می سازد.

جداول موقت

جداول موقت مثل جداول عادی هستند با اين تفاوت که آنها فقط زمانی وجود دارند که از آنها استفاده می شود. آنها به طور اتوماتيک وقتی که تمام کاربران ديگر با آنها کاری ندارند توسط Microsoft SQL حذف می شود. نکته: ايجاد يک جدول موقت يک رويه تقريباً پر هزينه می باشد که مربوط به هزينه منابع Server و چرخه های CPU می باشد. بسياری از استفاده های مرسوم از جداول موقت هم اکنون می توانند با استفاده از جدول متغيرها جايگزين شوند.

استفاده از جدول موقت

جداول موقت با استفاده از همان فرمان Create و Select INTO به عنوان جداول عادی ايجاد می شوند. بعد از تهيه جدول در سؤال قابل دسترسی به ارتباط خواهد بود. (اين است که اين يک جدول محلی تهيه شده توسط ارتباط متفاوت نيست)، اين عمل همچنين مثل جداول عادی قابل استفاده می باشد.

ايجاد جدول موقت محلی

1- دکمه علامت سؤال جديد را روی Toolbar تجزيه کننده سؤال کليک کنيد تا يک پنجره سؤال جديد ظاهر شود.

2- روی دکمه Loud Script روی Toolbar تجزيه کننده سؤال کليک کنيد. تجزيه کننده سؤال جعبه پرونده گفتگو را نشان خواهد داد.

3- نسخه خطی Create Local را انتخاب کنيد و Open را کليک کنيد. تجزيه کننده سؤال نسخه خطی را پر می کند.

4- دکمه Execute Query را در Toolbar تجزيه کننده سؤال کليک کنيد. تجزيه کننده سؤال جدول موقت ايجاد می کند.

5- User Table Folder را که در پايگاه داده Tempdb در Object browser می باشد را انتخاب کنيد.

6- F5 را برای به کارگيری مجدد نمايشگر Object browser فشار دهيد و User Table Folder را گسترش دهيد. نمايشگر سؤال جدول محلی dbo.# را در ليست نشان خواهد داد.

ايجاد جدول جهانی موقت

1- بدون بستن پنجره شامل نسخه خطی Create Local بر روی دکمه New Query روی Query Analyzer Toolbar برای باز کردن يک پنجره جديد خطی، کليک کنيد.

2- بر روی دکمه Loud Script روی Query Analyzer Toolbar کليک کنيد. Query Analyzer نشانگر جعبه گفتگوی فايل Query خواهد بود.

3- خطی را که در آن Create 6 Loud وجود دارد را انتخاب کنيد و Open را کليک کنيد. تجزيه کننده سؤال خط انتخابی را Loud می کند.

4- دکمه Execute Query را که روی Query Analyzer Toolbar می باشد را کليک کنيد. Query Analyzer جدول موقت را ايجاد می کند.

5- User Folder Table که مربوط به Tempdb Database در Object browser را انتخاب کنيد.

6- F5 را برای راه اندازی مجدد نمايشگر Object browser فشار دهيد. Query Analyzer نمايشگر dbo##6 Loud Table ليست خواهد بود.

ارتباط دادن جداول

Query هايی که در فصل 3 بررسی گرديد سطرهايش از يک جدول تکی ترسيم گرديده است اما Query ها به ويژه می توانند مفيد باشند برای ترکيب ستونهايی از چندين جدول يا نما که Joining Tables ناميده می شود و آن در شرطهای FROM يا WHERE از حالت SELECT انجام می گيرد. در اين فصل ما بر روی ايجاد ارتباطها با استفاده از شرط FROM که روشی توصيه شده است متمرکز خواهيم شد.

شناختن شرط FROM

همان طوری که ما ديده ايم، ساختار پايه ای از شرط FROM به آسانی نام از يک جدول يا نما ساده را فراهم می سازد. اما برای دسترسی پيدا کردن به توانايی از مدل ارتباطی، ما بايد به بازيابی ستونها از جداول چندگانه و نماها در يک Query خاص قادر باشيم. شرط FROM يک مکانيزمی برای انجام آن با استفاده از ساختار دستور زير:FROMON

اپراتور پيوند انواع پيوند برای به انجام رسيدن را تشريح می کند. Server SQL پيوندهای داخلی و خارجی همه نوسانات را پشتيبانی می کند، همان طوری که در بخش بعدی خواهيم ديد. شرايط پيوند يک تعبيری می باشد شبيه به ملاک که در شرط WHERE استفاده شده است. آن مشخص می کند که چگونه سطرها در دو جدول ارتباط خواهند يافت. بيشتر پردازشگرهای ربطی روی پايه ای از عبارتهای برابری مانند B ستون = A ستون به انجام می رسند. اما SQL Server هر اپراتور منطقی را پشتيبانی کرده و شرايط پيوند می تواند به طور دلخواه پيچيده باشد، با عبارات چندگانه پيوند يافته که از حرف ربط AND يا OR از همان راهی که يک شرط WHERE می تواند ملاک انتخابی چندگانه را شامل باشد استفاده کند. عبارت پيوند می تواند برای اضافه کردن جداول و نماهای اضافی برای Query تکرار شود. ساختار دستور برای پيوند جداول چندگانه عبارت است از: FROM

ON

يک حدود فرضی 256 جدولی برای هر Query وجود دارد، اما آن به حد زياد غير محتمل است که شما اصلاً نياز به 5 يا 6 نياز نداريد و 2 يا 3 بيشتر معمول می باشد. در حقيقت اگر شما نياز به اتصال بيش از 10 جدول در يک Query باشيد، شما بايد به دقت طرح پايگاه داده آن را نگاه کرده برای اينکه مطمئن شويد که آن به طور صحيح به حالت عادی در آمده است.

ايجاد کردن پيوندها

پيوندها می توانند در Query Designer با استفاده هر کدام از قاب Grid يا قاب SQL ايجاد گردند. قاب Grid اغلب آسانتر می باشد اگر شما جداولی که رسماً در طرح پايگاه داده مربوط شده اند پيوند دهيد، از موقعی که Query Designer پيوندی بين آنها به طور خودکار ايجاد خواهد کرد. اما به طور معمول قاب SQL با انعطاف پذيری بيشتر برای شما فراهم می گردد.

نامگذاری شئی ها

زمانی که شما با يک جدول يا نمای تکی کار می کنيد آنجا می تواند هيچ ابهامی در حدود منابع از يک ستون نداشته باشد از موقعی که همه نام ستونها در يک جدول بايد منحصر به فرد باشند. هنگامی که شما برای بار اول کار کردن با چندين جدول در يک Query را شروع می کنيد يا شما بايد برای مشخص کردن نام ستونها صريحاً مواظب باشيد. مشخصات کامل برای هر شئی پايگاه داده چهار معرفه را در بردارد. نام سرور، نام پايگاه داده، نام صاحب، نام شئی. معرفه ها به وسيله پريودها جداسازی می گردند. بنابراين نام واجد شرايط از جدول Oils در سيستم من Bunny.Aromatherary.dbo.Oil می باشد. مقداری از شئی ها مانند نماها و جداول شامل شئی های ديگر می باشد. برای رجوع به يکی از اين شئی های گنجانده شده (در اين حالت، ستونها). شما به آسانی نام آن را به نام شئی ضميمه می کنيد. نام واجد شرايط کامل از ستون OilID از جدول Oils (Bunny.Aromatherapy.dbo.Oils.Oil ID) می باشد. خوشبختانه شما فقط نياز به مشخص کردن کافی از درجه بندی ابهام اجتناب پذير داريد.

در يک Query مبنی بر يک جدول تکی، برای مثال نام ستون به وسيله خودش دارای مشخصات کافی می باشد. اگر يک Query به بيش از يک جدول مربوط گردد، اگر چه جداول دارای ستونهايی با يک نام باشد. شما بايد نام جدول را در نام شئی (Object) Oils.OilID , OilPropertise.OilID که تمايز را به طور کامل روشن می سازد لحاظ کنيد.

پيوندهای داخلی

بيشترين فرمهای رايج پيوند يک پيوند داخلی می باشد. يک پيوند داخلی فقط آن سطرهايی که شرايط پيوند TRUE را باز می گرداند باز خواهد گرداند.

پيوند دو جدول با استفاده از قاب دياگرام

1- Query Designer جدول Oils را به وسيله کليک راست کردن نام آن در قاب Details باز کرده روی جدول Open رفته و همه سطرهای بازگشتی را انتخاب می کنيم.

2- قاب دياگرام را به وسيله کليک کردن دکمه قاب دياگرام روی نوار ابزار Query Designer نشان می دهيم.

3- دکمه Add Table را روی نوار ابزار Query Designer کليک می کنيم. Query Designer کادر محاوره ای Add Table را نشان می دهد.

4- جدول PlantTypes را در ليست جدول انتخاب کرده و Add را کليک می کنيم. SQL Server جدول را به Query اضافه می کند.

5- Close را برای بستن کادر محاوره ای Add Table کليک می کنيم.

6- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. Query Designer قاب SQL را نشان می دهد.

7- علامت * را بعد از کليد واژه SELECT حذف می کنيم.

8- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. (OK را کليک کرده اگر Query Designer يک متن خطا درباره ساختار دستور SELECT نشان دهد). Query Designer قاب SQL را پنهان می سازد.

مهم: زمانی که شما Query Designer را باز می کنيد، حالت SQL معمولاً * را انتخاب می کند. انتخاب کردن ستونهای مشخص در قاب دياگرام سبب می شود که آنها به ليست ستون اضافه شوند. مايکروسافت آن را به صورت يک خصيصه در نظر می گيرد.

9- در قاب دياگرام ستونهای OilID و OilName را در جدول Oils و ستون PlantType را در جدول PlantType انتخاب می کنيم.

10- دکمه Run روی نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer مقادير Planttype را برای هر Oil نشان می دهد.

ارتباط دو جدول به وسيله قاب SQL

1– قاب دياگرام را پنهان کرده و قاب SQL را به وسيله کليک کردن دکمه ها روی نوار ابزار Query Designer نشان می دهيم.

2- حالت SQL موجود را با عبارت زير جايگزين می کنيم.

SELECT Oils.OilID,Oils.Oil Name,PlantParts.PlantPart

FROM OilsINNER Join

PlantParts ON Oils.PlantPartID=PlantParts.PlantPart ID

3- دکمه Run را در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer مقاديرها برای هر سطر Oils Plant Part را نشان می دهد.

ارتباط جداول چندگانه با استفاده از قاب دياگرام

1- قاب SQL را پنهان کرده و قاب دياگرام را نمايش می دهيم.

2- دکمه Add Table را روی نوار ابزار Query Designer کليک می کنيم. Query Designer کادر محاوره ای Add Table را نشان می دهد.

3- جدول Planttypes را در ليست جداول انتخاب می کنيم. Add را کليک کرده SQL Server جدول را به Query اضافه می کند.

4- Close را برای بستن کادر محاوره ای Add Table کليک می کنيم.

5- در قاب دياگرام ستون Planttype را در جدول Planttypes برای اضافه کردن ستون به Query کليک می کنيم.

6- دکمه Run در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer هر دوی ستونهای PlantPart و Planttype را برای هر Oil نشان می دهد.

ارتباط جداول چندگانه با استفاده از قاب SQL

1- قاب دياگرام را پنهان کرده و قاب SQL را نشان می دهيم.

2- عبارت SELECT موجود را با عبارت زير جايگزين می کنيم.

SELECT Oils.Oil ID.Oils.Oil Name.odors.odor

FROM Oils

INNER Join Oilodors on Oils.OilID=Oil odors.OilID

INNER Join odors on Oilodors.odor ID=odors.odorID

3- دکمه Run را در نوار ابزار Query Designer برای اجرای Query کليک می کنيم.

4- پنجره Query Designer را می بنديم.

 

ارتباطات خارجی

بعضی مواقع شما می خواهيد که يک Query همه سطرها يک يا چندين جدول را باز گرداند، خواه آنها سطرهای ارتباطی در جداول ديگر داشته باشند و يا خير. که با استفاده از يک ارتباط خارجی به انجام رسيده که می تواند سه گونه باشد: چپ، راست و کامل. يک ارتباط خارجی همه سطرهايی از جدول چپ در شرط JOIN و فقط آن سطرهايی از جدول راست برای اينکه شرايط ارتباط TRUE می باشد را باز خواهد گرداند.

دستور ساختار برای يک ارتباط خارجی عبارت است از:

FROM Left Table Left Outer Join Right able on

برای مثال عبارت SELECT زير، همه سطرها در جدول Oils را باز می گرداند و مقادير Plant-part از جدول آنجايی که Plant-part مشخص شده جفت می شود. آنجا سطرهای ارتباطی در جدول Plant Parts وجود ندارد و Query ، Null را به عنوان مقدار Plant-part برای آن سطر باز می گرداند.

SELECT Oils.Oil Name.Plant Parts.Plant Part

FROM Oils Left Outer Join

Plant Parts on Oils.Plant Part ID=Plant Parts.Plant Part ID

يک ارتباط خارجی سمت راست مقابل يک ارتباط خارجی سمت چپ می باشد. آن همه سطرها از جدول راست در شرط JOIN را باز می گرداند و مقادير ارتباطی را از جدول چپ ارتباط می دهد. نظر به اينکه يک ارتباط کاملاً خارجی همه سطرها از دو جدول را با هم هماهنگ می سازد آنجايی که امکان پذير باشد.

ايجاد کردن يک ارتباط خارجی چپ با استفاده از قاب دياگرام

1- Query Designer را برای جدول Oils به وسيله کليک راست کردن نام جدول در قاب Details باز کرده، روی جدول Open رفته و همه سطرهای بازگشتی را انتخاب می کنيم.

2- قاب دياگرام را نشان می دهيم.

3- دکمه Add Table را در نوار ابزار Query Designer کليک می کنيم. Query Designer کادر محاوره ای Add Table را نشان می دهد.

4- Cautions و Oil Cautions در ليست جدول را انتخاب و سپس Add را کليک می کنيم. Query Designer جدولی برای Query اضافه می کند.

راهنمايی: شما می توانيد يک ارتباط خارجی چپ با دو جدول ايجاد کنيد. ما حالت سوم را در ايجاد استفاده می کنيم با جدول OilCautions که به عنوان يک جدول الحاقی عمل می کند که ارتباط چندگانه بين Oils و Cautions را حل می کند.

5- Close را برای بستن کادر محاوره ای کليک می کنيم.

راهنمايی: شما می توانيد جداول را در قاب دياگرام برای پاک کردن نمايشگر درج کنيد.

6- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. Query Designer قاب SQL را نشان می دهد.

7- علامت * را در کليد واژه SELECT حذف می کنيم.

8- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. (OK را کليک کرده اگر Query Designer يک متن خطا درباره ساختار از عبارت SELECT نشان دهد) Query Designer قاب SQL را پنهان می سازد.

مهم: زمانی که شما Query Designer را باز می کنيد عبارت SQL پيش فرض معمولاً * را انتخاب می کند. ستون ويژه که در قاب دياگرام انتخاب شده سبب می شود که آنها برای ليست ستون اضافه شوند. مايکروسافت اين را به عنوان يک ويژگی در نظر می گيرد.

9- در قاب دياگرام، ستونها از OilName و OilID را از جدول Oils و ستون Caution را از جدول Cautions برای خروجی انتخاب می کنيم.

10- دکمه Run را در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer فقط آن Oils که Cautions دارد را نشان می دهد.

11- خط ارتباطی بين جداول Oil Cautions و Oils را به وسيله کليک کردن آن انتخاب می کنيم و سپس دکمه Properties را در نوار ابزار Query Designer کليک می کنيم. Query Designer کادر محاوره ای Join Properties را نشان می دهد.

12- All Rows From Oils را انتخاب می کنيم.

راهنمايی: همه سطرها از Oil Cautions يک ارتباطی خارجی سمت راست ايجاد خواهد کرد و هر دوی گزينه ها را انتخاب کرده که يک ارتباط کامل خارجی ايجاد می کند.

13- Close را برای بستن کادر محاوره ای کليک می کنيم. Query Designer خط ارتباطی را برای انعکاس مشخصات ارتباطی جديد تغيير می دهد.

14- دکمه Run در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer همه سطرها در جدول Oils را نشان می دهد و مقادير از جدول Cautions را ارتباط می دهد.

ايجاد يک ارتباط خارجی سمت راست با استفاده از قاب SQL

1- قاب دياگرام را پنهان کرده و قاب SQL را در Query Designer نشان می دهيم.

2- حالت SELECT موجود را با عبارت زير جايگزين می کنيم.

SELECT Oils.Oil Name.Properties.Property

FROM Oils

Right OUTER JOIN Oil Properties on

Oils.Oil ID=Oil Properties.Oil ID

INNER JOIN Properties on

Oil Properties.Property ID=Properties.Property ID

3- دکمه Run را در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer شامل همه سطرها از جدول Oil Properties با مقادير ارتباطی از جدول Oils می باشد.

4- پنجره Query Designer را می بنديم.

UNIONS

آخرين نوع از ارتباط به صورت Union شناخته می گردد. يک Union نتايجی از دو عبارت SELECT متمايز را در داخل يک تنظيم از سطرها ترکيب می کند. ارتباطات داخلی و خارجی ستونهايی از دو جدول درگير شده در يک سطر تکی را با هم ترکيب می کند يک Union سطرهايی از دو جدول در يک ستون تکی را به هم ترکيب می کند. شما می توانيد تصور کنيد که تنظيمات دو سطر را گرفته و يکی را در بالای ديگری باز گردانيد. اگر چه قاعده اصلی از سطرها باز گردانده شده به وسيله شرط ORDER BY مشخص می گردد. ساختار دستور يک Union از پيوندها متفاوت می باشد. يک Union ساختار دستوری به صورت زير دارد:

SELECT FROM

UNION [All]

SELECT FROM

[ORDER BY ]

شما می توانيد بسياری از حالتهای UNION SELECT را همان طوری که شما برای يک Query دوست داريد اضافه کنيد. (اين موضوع برای 256 جدول محدود می باشد) اما همه عبارتهای SELECT بايد همان تعداد از ستونها را از انواع سازگار يا شبيه در همان دستور باز گرداند. اولين عبارت SELECT نامهای ستون را مشخص خواهد کرد و شرط ORDER BY از آخرين عبارت SELECT دستور Sort را تعيين خواهد کرد. به طور پيش فرض، SQL Server سطرهای چندگانه ای از نتايج را از يک Union Query برمی دارد. اگر شما Union All را مشخص کنيد، ولی سطرهای چندگانه حفظ خواهد شد.

ايجاد کردن يک UNION

1- Query Designer را به وسيله کليک کردن جدول Properties در قاب Details باز کرده روی جدول Open رفته و همه سطرهای بازگشتی را انتخاب می کنيم.

2- قاب SQL را نشان می دهيم.

3- حالت SQL موجود را با عبارت زير جايگزين می کنيم.

SELECT Property Table AS Table Name.Property ID AS ID

Property AS Quality From Properties

UNION

SELECT odor Table.odor ID odor From odors

ORDER BY Quality

4- دکمه Run در نوار ابزار Query Designer را برای اجرای Query کليک می کنيم. Query Designer نتايجی از دو عبارت SELECT را با هم ترکيب می کند.

(بخش یازدهم)

ايجاد کردن Check Constraint

شناخت Check Constraint

يکی از مهمترين بازرسی های طراحی پايگاه داده يکپارچه سازی داده ها می باشد. قاعده يکپارچگی داده ها تضمين مي کند که داده های ايجاد شده در پايگاه داده اگر درست نباشد حداقل قابل قبول می باشد. چندين سطح از يکپارچگی داده ها وجود دارد. در درس 7 ما درباره يکپارچگی رابطه ای مطالعه کرديم که تضمين می کند اجتماع بين جداول ايجاد و به طور صحيح نگهداری می گردند.

Check Constraintsبرای اجرای دو فرم اضافی از يکپارچگی پايگاه داده استفاده می شود. domain Integrity و entity Integrity . در اصطلاحات رابطه ای که Domain محدوده ای از مقاديری است که يک ستون می تواند داشته باشد. نوع داده های يک ستون يکی از ويژگيهای از يک Domain می باشد، اما تعريف نوع داده معمولاً کافی نيست. برای مثال، يک ستون Smallint می تواند شامل مقادير صحيح از 768/32- تا 767/32 می باشد که ممکن نوع داده مناسبی برای يک ستونی که شامل سالی است که يک کارمند مدرک دانشگاهي را در دريافت می کند باشد. اما حدود اصلی مقادير ستون Year Degree Awarded بيشتر محدود شده و بين 1900 و سال جاری می باشد. شما از يک Check Constraints استفاده می کنيد، برای تخمين اينکه هيچ کس به طور واقعی مقادير 1543 يا 2075 را به عنوان مقدار ستون وارد نمی کند. Entity Integrity Constraints جامعيت از موجودی خودش را اجرا می کند. مهمترين محدوديتهای يکپارچگی موجوديت آن است که هر موجوديت Entity Integrity بايد به طور واحد قابل شناسايی باشد. اين محدوديت به وسيله مشخص کردن يک کليد اصلی برای جدول انجام می گيرد. يکپارچگی موجوديت همچنين می تواند درگير ارزيابی شرطی از چندين ستون در يک جدول باشد و اين نوع از محدوديت اغلب بيشتر با استفاده از Check Constraints انجام می گيرد. برای مثال، اگر يک جدول شامل ستونهای کشور و ايالت باشد شما ممکن از يک Check Constraints برای مشخص کردن اينکه ارزش ستون State ، “AZ” معتبر می باشد فقط اگر ستون Country شامل مقادير USA باشد. Check Constraint به عنوان Boolean Expressions شناخته می شود يک Boolean Expressions برای مقادير True يا False ارزيابی می گردد. Boolean Expressions را در درس 13 می آموزيم. در اين درس ما از عبارت LEN()>=4 استفاده می کنيم. LEN يک تابع Transact-SQL می باشد که تعدادی کارکترهای يک رشته را برمی گرداند. بنابراين عبارت LEN()>=4 ارزش آن اگر شامل 4 يا بيشتر کارکتر باشد ارزش آن True و اگر کمتر از 4 باشد ارزش آن False می گردد.

ايجاد کردن Check Constraint

مانند ايندکس ها و پيوندها شما می توانيد Check Constraints را با استفاده از کادر محاوره ای Properties از Table Designer ايجاد کنيد.

1- Table Designer را برای جدول Oils به وسيله کليک راست کردن نام جدول در قاب Details باز کرده و Design Table را انتخاب می کنيم. Table Designer , SQL Server را باز می کنيم.

2- دکمه Constraints را کليک کرده SQL Server کادر محاوره ای Table Designer Properties را با صفحه خصوصيات Constraints Check نشان داده شده باز می کنيم.

3- New را کليک کرده Ck-Oils , SQL Server را به عنوان نام محدوديت پيشنهاد می دهد. برای اين مثال اين نام را می پذيريم.

4- Len(Oil Name)>=4را به عنوان عبارت محدوديت وارد می کنيم.

راهنمايی: اگر شما يک Check Constraint جديد را ايجاد می کنيد و مراقب نيستيد که آيا داده های موجود متابعت می شوند، شما می توانيد بگويد به SQL Server که از ايجاد کردن داده به وسيله چک نکردنCheck Existing Data On Creation از محدوديت چشم پوشی کند.

5- Close را کليک کرده SQL Server کادر محاوره ای Designers Properties Table را می بندد.

6- دکمه Save را کليک کرده SQL Server کنترل می کند که همه سطرها در جدول باCheck Constraint مواجه می شوند و سپس محدوديت را ذخيره می کنيم.

مديريت Check Constraints

به عنوان بخشی از طرح پايگ اه داده، Check Constraints نبايد تحت شرايط نرمال نياز به مقدار زياد نگهداری داشته باشد. شما آنها را يکباره تعريف کرده زمانی که پايگاه داده را ايجاد می کنيد. اگر چه طرحهای پايگاه داده به تدريج تغيير خواهد کرد. تغييرات Check Constraints تغيير خواهد کرد. Enterprise Manager نگهداری محدوديتها را آسان می سازد.

تغيير دادن Check Constraint

Table Designer مکانيزمی برای تغيير متن از يک Check Constraint از همان کادر محاوره ای که شما برای ايجاد آن استفاده کرديد فراهم می کند.

تغيير متن محدوديت

1- اگر Table Designer برای جدول Oils هنوز از تمرين قبل باز نمی باشد به وسيله کليک راست کردن نام جدول در قاب Details آن را باز کرده وDesign Table را انتخاب می کنيم. Table Designer , SQL Sarver را باز می کند.

2- دکمه Constraints را کليک کرده SQL Sarver کادر محاوره ایTable Designer را با صفحه خصوصيات Check Constraint باز می کند.

3- اطمينان حاصل کنيد کهCk – Oilsدر Constraint Combo Box انتخاب شده نشان داده شده است.

4- متن محدوديت را برایLEN (Oil Name )>2 به عنوان عبارت محدوديت جديد تغيير می دهيم.

5- Close را کليک کردهSQL Server کادر محاوره ایTable Designer’s Properties را می بندد.

6- دکمه Save را کليک کرده SQL Server همه سطرها در جدول را که با Check Constraint جديد مواجه است را کنترل کرده و سپس محدوديت را ذخيره می سازد.

نگهداری Check Constraints

مانند ديگر خصوصيات جدول ديگر، Check Constraints در کادر محاوره ای Properties ازTable Design نگهداری می گردد.

تغيير نام يک Check Constraints

1- Table Designer برای جدول Oils به وسيله کليک راست کردن نام جدول در قاب Details باز کرده و Design Table را انتخاب می کنيم. Table Designer , SQL Server را باز می کنيم.

2- دکمه Constraints را کليک کرده SQL Server کادر محاوره ای Table Designers Properties را با صفحه خصوصيات Check Constraint نشان داده شده باز می کند.

3- Ck-Oils را در فيلد Constraint Name انتخاب کرده و آن را به Ck-Deleteme تغيير می دهيم.

4- Close را کليک کرده SQL Server کادر محاوره ای Properties را می بندد.

5- دکمه Save را کليک کردهSQL Server همه سطرها در جدول که باCheck Constraint مواجه شده اند را کنترل می کند و سپسConstraint ذخيره می گردد.

حذف يک Check Constraint

1- Table Designer برای جدول Oils را به وسيله کليک راست کردن نام جدول در قاب Details باز کرده و جدول Design را انتخاب می کنيم. Table Designer , SQL Server را باز می کند.

2- دکمه Constraints را کليک کرده SQL Server کادر محاوره ای Table Designers Properties را با صفحه خصوصياتCheck Constraint نشان داده شده باز می کنيم.

3- اطمينان حاصل کنيد که Ck-Deleteme در فيلد محدوديت انتخاب شده می باشد و سپس Delete را کليک می کنيم. SQL Server محدوديت را برمی دارد.

4- Close را کليک کرده SQL Server کادر محاوره ای Properties را می بندد.

5- دکمه Save را کليک می کنيم. SQL Server محدوديت را برمی دارد.

6- Table Designer را می بنديم.

ماخذ

1.http://www.semeng.net

2.iritn.com

3.www.sakhtafzar.com

4.www.yadbegir.com

5.www.hardware.com