تعریف متغییر در transaction sql ها

متغییر ها توسط دستور declare تعریف میشوند و توسط دستور set یا select  مقدار دهی میشوند. به این صورت:

نوع داده    نام متغییر@   declare

نکته: متغییر های محلی که با declare تعریف میشوند باید با علامت @ شروع شوند.

مثال(مقدار دهی متغییر با set):

پرس وجویی بنویسید که در آن نام تمام کسانی که شامل حرف a می شود برگردانده شود.

declare  @name   varchar

‘%set  @name  = ‘%a

select    std_name   from   student

where   std_name   like  @name

مقدار دهی با select: این دستور حتما باید یک مقدار واحد را برگرداند.

declare   @ave  int

select    @avg = ave(age)   from    student

print  @avg

نکته: بادستور print  میتوان محتویات یک متغییر را نمایش داد.

ساختارهای شرطی (if ,else):

شکل کلی if ها در sql  به صورت زیر میباشد.

شرط یا همان دستورات    if

begin

دستورات

end

else

begin

دستورات

end

مثال:دستوری بنویسید که در صورت بزرگ بودن مجموع نمرات دانش آموز احمدی از ۱۰۰ پیغام مناسب نمایش دهد و اگر نبود رکورد های مربوط به max و min نمرات نمایش داده شوند.

if   (select   sum(grade)  from student

‘  where  std_family =’ahmadi

(group by std_family

‘print ’sum grade of ahmadi is more than 100

else

select  min(grade),max(grade)   from student

‘where   std_family=’ahmadi

group by  std_family

ساختار تکرار:

شکل کلی دستور به این صورت است:

شرایط یا دستورات  while

begin

دستورات

end

دستور break , continue:

break: خروج از حلقه -دستورات حلقه دیگر اجرا نمیشود و کنترل برنامه برمی گردد به اولین دستور بعد از end

continue: دستورات حلقه به ازای مقدار بعدی حلقه اجرا می شود و برنامه برمی گردد به اولین دستور حلقه

مثال:

دستوری بنویسید که هربار ۲ نمره به نمره دانش اموزان اضافه کند و اگر max آن بیشتر از ۱۸ شد دیگر اضافه نکند.(شرط میانگین نمرات کوچکتر از ۱۲ باشد)

while (select   ave(grade) from student ) <12

begin

update student  set grade =grade+2

if (select avg(grade) from student) >18

break

end

توابع رشته ای در sql :

تبدیل کاراکتر به کد اسکی-خروجی یک عدد است.

(asci(char

تبدیل کد اسکی به کاراکتر-خروجی که کاراکتر است.

(char(int

موقعیت یک زیر رشته در رشته ای دیگر-خروجی یک عدد است.

(رشته,زیر رشته)char index

مقایسه دو رشته-خروجی یک عدد است-اگر خروجی تابع عدد ۳ بود به ان معناست که هر دو رشته نا برابر اند و اگر خروجی عدد ۴ بود رشته ها برابر  و مساوی هستند.

(diffrence(str1,str2

از نقطه شروع به تعدادی که ما تعیین می کنیم از سمت چپ رشته یک زیر رشته برمی گرداند.

(محل شروع یک عدد,left(str

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

(محل شروع یک عدد,right(str

طول رشته را برمی گرداند.

(len(str

تبدیل رشته به حروف کوچک

(lower(str

تبدیل رشته به حروف بزرگ

(upper(str

حذف فضاهای خالی یک رشته از سمت چپ

(trim(str

حذف فضاهای خالی رشته از سمت راست

(rtrim(str

جایگزین کردن رشته دوم به جای رشته اول

(رشته دوم,رشته اول,رشته اصلی)replace

تطابق دادن یک رشته با یک الگو-خروجی یک عدد است اگر عدد صفر بود رشته مانند الگو می باشد.

(رشته والگو)pat index

تبدیل یک عدد به رشته عددی

(str(int

یک زیر رشته از نقطه شروع به طول دلخواه برمی گرداند.

(طول رشته ,نقطه شروع ,رشته اصلی)substring

معکوس یک رشته را برمی گرداند.

(reverse(str

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

مثال:

دستوری بنویسید که چهار کاراکتر اول فیلد شماره دانش آموزی یا با مقادیر ۱ تا ۴ جایگزین کند.

update student  set

(’std_num  = replase(std_num,left(std_num,4),’۱۲۳۴

توابع تاریخ وزمان:

اضافه کردن قسمتی از تاریخ(ماه یا روز یا سال) به تاریخ

(مقدار تاریخ,تعداد,dateadd(month/date/year

تاریخ جاری سیستم را برمی گرداند.

()get date

تفاوت دو تاریخ

(تاریخ۲,تاریخ۱,قسمتی از تاریخ) date diff

برگرداندن نام قستی از تاریخ مثلا نام ماه یا روز

(تاریخ,قسمتی از تاریخ)date name

برگرداندن قسمت روز تاریخ

(تاریخ)day

برگرداندن قسمت ماه تاریخ

(تاریخ)month

برگرداندن سال تاریخ

(تاریخ)year

تاریخ جاری سیستم به فرم بین الملل

()  getutedate

-----------------------------

روال های ذخیره شده  stored procedure

به مجموعه دستورات t.sql که شامل تعریف متغییر ها ، عملیات روی آنها و دستورات ورودی و خروجی میشود s.p گفته می شود. هر روال ذخیره شده یک شی است که می تواند سیستمی یا غیر سیستمی باشد.روال های سیستمی قبلا تعریف شده اند و با ایجاد یک بانک اطلاعاتی جدید به آن بانک اضافه می شوند و ما فقط در T.sql ها آنها را فراخوانی می کنیم ولی  روال های  غیر سیستمی توسط خود کاربر تعریف شده و همانند نوع سیستمی می توانند بارها و بارها فرخوانی شوند.

ایجاد یک روال ذخیره شده:

پارامتر های ورودی   نام  روال   create procedure

‍‌Output]  as ]   نوع پارامتر ها

دستورات  select

پارامتر های ورودی روال ها با علامت @ و نوع داده ای تعریف می شوند و پارامتر های خروجی بعد از پارامتر های ورودی با علامت @ و نوع داده ای و کلمه کلیدی output می آیند.

مثال: (پارامتر های خروجی)

create proceduer  grdesum @sum int output

as

select @sum = sum(grade) from student

موقع فراخوانی جمع نمرات به عنوان خروجی برگردانده می شود.

(پارامتر های ورودی )

create    std_info   @name  nvarchar(20) , @family  nvarchar

as

select  std_name , std_family, age  from student

where  std_name = @name  and std_famil=@family

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

فراخوانی  proceduer

اگر در قطعه کد  t.sql دستور فراخوانی اولین دستور باشد می توان فقط نام پروسیجر را نوشت ولی در صورتی که اولین دستور نباشد باید حتما عبارت exec یا execute را همراه آن نوشت.

فراخوانی روال هایی که ورودی دارند:

مقدار فرستاده شده برای روال=نام پارامترورودی @   نام پروسیجر   exec

مثال:

‘exec     std_info    @name=’anis’,@family=’barmar

فراخوانی روال ها بدون ورودی:

نام پروسیجر  exec

توابع تعریف شده کاربرuser difine function-udf-

تابع مجموعه از t.sql هاست که یک بار نوشته می شود و چند باز فراخوانی می شود ولی تفاوت آن با پروسیجرهای قبلی در این است که حتما و حداقل یک خروجی را دارد و باید یک مقدار را به عنوان خروجی برگرداند.

نوع خروجی    returns    (پارامتر ها)        نام تابع    create   function

as

begin

….

نام متغییر خروجی   return

end

روش فراخوانی :

‘نامی برای نمایش’  as   (پارامتر ها)نام تابع .نام مالک.نام بانک   select

مثال : تابعی بنویسید که  یک عدد را دریافت و فاکتوریل آن را حساب کند.

( create  function  fact (@num int

returns int

as

begin

declare  @sum int

set  @sum =1

declare  @counter

set @counter = 0

while  @counter<= @num

begin

set  @counter = @counter+1

set  @sum = @sum *@counter

end

return  @sum

end

فراخوانی:

’select    class.dbo.fact(3)   as  ‘fact

نکته:dbo یک مالک عمومی است.

توابع جدولی یا inline table:

این نوع تابع نیز حتما خروجی دارد و می توان بارها و بارها از آن استفاده کرد اما تفاوت ان با تابع قبلی در این است که توابع جدولی مجموعه ای از رکورد های جدول را برمی گرداند.

ایجاد یک تابع جدولی:

return   table    (نام پارامتر ها)نام تابع    create function

as

(دستورات  rreturn   (select

فراخوانی توابع جدولی

(پارامتر ها)نام تابع    select    * from

مثال:اطلاعات دانش آموزانی را برگرداند که معلمشان همان معلمی باشد که به عنوان ورودی به تابع فرستاده می شود.

create    function  std_info(@teacher    varchar) returns   table

as

return  (select student.std_name,student.std_family,register.teacher

where   student.std_num =register.std_num

(and    register.teacher = @teacher

روش فراخوانی:

(’select   *  from     std_info(‘ahmadi

Trigger :

نوعی روال ذخیره شده است که در مواقع خاص اجرا می شود مثلا در زمان درج داده جدید یا ویرایش داده ها اجرا می شود . توجه کنید که trigger هیچ گاه فراخوانی نمی شود و بلکه اتوماتیک اجرا میشود(البته در زمانی که مشخص می کنید)  توسط دستور زیر ایجاد میشود.

نام  تریگر  create  trigger

نام جدولی که تریگر روی ان عمل می کند on

for    insert/update/delete

as

دستوراتی بعد از عمل مشخص شده انجام میشود

نکته: به جای کلمه for  می توان از کلمه after , inetred  af نیز استفاده کردو کلمه after پیش فرض است.

after: بعد از انجام موفقیت آمیز عملیات (insert/update/delete)

for: در همان لحظه اجرا می شود.

ineterd of: ترگیر را به یک قطعه کد T.SQl عادی تبدیل می کند و مانند یک پروسیجر معمولی تریگر را می سازد.

ایجاد یک تریگر به صورت ویزاردی:

راست کلیک روی جدول مورد نظر/گزینهall taks/mange trigger و نوشتن کد های مورد نظر

مثال:

create  trigger std_trigger

on  student

for insert/update

as

if  (select max(grade)   from student) >20

‘print     ‘a range is not valid

نتیجه : در لحظه ورود یا تغییر داده ها اگر بزرگترین نمره در جدول از ۲۰ بیشتر بود پیغام مناسب را نمایش می دهد.

مثال ۲: تریگری بنویسید که بعد از درج داده جدید در جدول sudent اگر داده ها بیشتر از ۱۰ رکورد شد یک پیغام خطا چاپ کند و رکورد های درج شده را حذف کند.

create trigger isert_trigger

on student

for  insert

as

if    (select count(*)   from student) >10

begin

‘print  ‘you cannot insert

rollback

end

موفق باشید

------------------------------------------

دستور raiserror در تریگرها

توسط این دستور یک پیغام خطا تولید میشود که در جدول sys_message در بانک اطلاعاتی master (جدول پیغام های سیستمی ) ذخیره می شود.

روش استفاده :

(حالت ،شدت،”متن خطا “)raiserror

متن خطا:یا متن یا شماره پیغامی از پیغام های سیستمی که در جدول پیغام های سیستمی ذخیره شده

شدت:عددی بین ۱ تا ۲۵ برای پیام هایی که خودمان پیاده می کنیم می توانیم یک عدد بین ۱ تا ۱۸ بدهیم

حالت: عددی است بین     ۱ تا ۱۲۷ که اطلاعاتی راجع به حالت خطا را نگه می دارد

تابع()update در تریگر

در ازای عملیات های insert  و update یک مقدار بولین برمی گرداند که اگر true باشد یعنی آن ستون تغییر کرده است.

روش استفاده:

…  (نام ستون یا فیلد)if update

نکته :این تابع فقط در بدنه تریگر ها استفاده می شود.

مثال: تریگری بنویسید که اجازه ندهد فیلد نام تغییر کند.

create  trigger  name_std

on student

after upfate , insert

as

(if  update (std_name

begin

(raiserror(“you can not change name”,۱۰,۲

rollback

end

مفهوم جداول deleted ,inserted

دستورات DML که باعث اجرای تریگر می شودبا ۲ جدول موقت inserted و deleted کار می کند که این دو جدول به صورت اتوماتیک ایجاد و مقدار دهی می  شوند ما می توانیم از این جداول برای تست کردن عملیات های DML قبل از اعمال روی جداول استفاده کنیم.

در جدول deleted یک نسخه از تمام رکورد های حذف شده در اثر دستورات delete یا update را نگه می دارد و جدول inserted یک نسخه از تمام رکورد های جدید اضافه شده بر اثر عملیات های insert , update را نگه می دارد دقت کنید که عمل update هردو جدول را مقدار دهی می کند.

ما از طریق نوشتن دستورات join جداول موقت را با جداول اصلی می توانیم مقادیری را که قبلا حذف شده بود یا تازه درج شده را ببینم:

مثال:تریگری بنویسید که بعد از عملیات درج رکورد های درج شده جدید جدول insert را نمایش دهد.

create trigger inset_trigger

on student

for insert

as

select student.std_num  ,inserted.std_num

from inserted,student

where student.std_num=inserted.std_num

تابع drop برای حذف تریگر

نام تریگر drop trigger

تابع alter برای تغییر تریگر

نام  تریگری که میخواهیم تغییر بدهیم  alter  trigger

نام جدول   on

…..   for

…..as

یکی از موارد on,forیا as تغییر می کند.

موفق باشید

-----------------------

نصب و راه اندازی IIs :

IIS وب سرور مایکروسافت  می باشد و برای ایجاد و مدیرت هاستیگ وب سایت ها مورد استفاده قرار می گیرد.

این برنامه  بر روی ویندوز های ۲۰۰۰ به بالا بر پایه ان تی موجود است.برای نصب آن به قسمت Add/remove programs  در کنترل پنل می روید و از گزینه های سمت چپ add/remove windows component را انتخاب می کنید. از صفحه ای که باز می شود internet information servise(IIS) را انتخاب کرده و سپس گزینه Details  را انتخاب و همه گزینه های موجود را علامت دارمی کنید. بعد از ok سی دی ویندوز خود را در درایو گزاشته و next را بزنید.بعد از نصب سیستم را ریست کنید.

جزئیات IIS که در هنگام نصب آنها را انتخاب کرده اید:

۱٫ documention :فایلهای راهنما و مثال های وابسته را نصب می کند.

۲٫  file transfer protocol(ftp :توانایی دانلود و آپلود فایل را به سایت شما اضافه می کند.

۳٫ front pages server exstension :اگر برای ساخت وب سایت از ویژوال استادیو یا فرانت پیج استفاده می کنید باید این گزینه را انتخاب کنید.

۴٫ internet service manger  : نگارش تحت وب توانایی های مدیرتی وب سایت.

۵٫NNTP service : اگر به پشتیبانی network news نیاز دارید آن را انتخاب کنید.

۶٫ SMTP service  : توانایی فرستادن ایمیل را فراهم می کند.

برای مدیریت IIS می توانید از Administrative tools   در کنترل پنل گزینهInternet Information Services را اجرا کنید.

نصب net framework. :

روش اول: نصب کامل ویژال استادیوکه به همراه آن نسخه  کامل  دانت فریم ورک نصب می شود.

روش دوم :استفاده از سی دی های کامپوننت همراه ویژال استادیو است.نصب آن هیچ نکته خاصی ندارد تنها روی دکمه next  کلیک کنید.البته بهتر است روی سیستمی که  می خواهید فایلهایتان را اجرا کنید کامپوننت های ویژوال استادیو دات نت را کامل نصب کنید.

تنظیمات IIS  برای ایجاد اولین برنام ASP.NET

مکانی که فایلهای وب سرور شما در آن ذخیره می شود به نام home  یا root شناخته می شود. تعیین ای پوشه توسط IIS انجام می شود و به طور پیش فرض c:\inetpub\wwwroot می باشد(این پوشه هنگام نصب IIS در درایو ویندوز شما ساخته می شود) که تعوض ان به هر مسیر دیگری امکان پذیر است.ولی پیشنهاد می کنم مسیرwwwroot را تغییر ندهید.

تغییر مسیر پوشه home :

به قسمت مدیریت IIS در کنتل پنل بروید(Administrative tools\Internet Information Services) از ساختار درختی سمت چپ زیر شاخه web site–>default web site  را انتخاب کرده و properties آن را از طریق راست کلیک باز نمایید.حالا در tab به نام home directory می توانید مسیر پوشه wwwroot را تغییر دهید.

در این قسمت برای تعیین پوشه جدید سه گزینه وجود دارد:

۱٫a directory located on this computer: این گزینه موقعی استفاده می شود که پوشه به صورت لوکال و در سیستم خودتان باشد(پیش فرض)

۲٫ A share location on anader computer: هنگامی که پوشه شما در شبکه به اشتراک گذاشته شده است .

۳٫ a redirection to URL: در این حالت برای دسترسی به سایت شما به آدرس دیگری forward خواهد شد.

ایجاد یک پوشه مجازی در IIS:

تمامی زیر پوشه های شما در home (inetpub\wwroot برای کاربرانتان قابل  درسترسی می باشد برای مثال اگر پوشه ای به نام anis در wwwroot  شما وجود داشته باشد با این آدرس به آن دسترسی خواهید داشت:

http://local host/anis

با ایجاد پوشه مجازی می توان از پوشه هایی استفاده کرد که الزاما زیر پوشه شما د رhome وب سایتتان نیست.مثلا پوشه ای در درایوی جز درایو ویندوز. برای این کار در (Administrative tools\Internet Information Services)  روی گزینه default web site راست کلیک کرده و گزینه new–>virtual directory را انتخاب کنید و next را بزنید .برای اغلب سایت های موارد امنیتی مشخص شده کافی می باشد.

البته راه دیگری هم وجود دارد:

راست کلیک بر روی پوشه مورد نظر خود در ویندوز و انتخاب گزینه propeties در سربرگ web sharing وب سایتی را که می خواهید برای آن پوشه مجازی بسازید را انتخاب کنید و موارد امنتی را مشخص کنید و ok کنید.

سطوح دسترسی در هنگام ایجاد پوشه مجازی:

read :کاربران می توانند به سایت شما مراجعه کنند و محتویات آن را مشاهده کنند که به صورت پیش فرض انتخاب شده است.

run scripts: توانایی اجرای اسکریپت ها را در دایرکتوری مجازی می دهد.برای اجرای صفحات asp باید حتما انتخاب شود.

execut : توانایی اجرای برنامه ها را در پوشه مجازی می دهد. این گزینه باید برای وب سایت هایی فایل های ASP  آنها نیاز به ساختن پوشه ای در سرور دارد فعال شود.

بقیه تنظیمات IIS  رو در جلسات بعدی آموزش می بینید.

-------------------------------------------------------