dynamically number rows in a SELECT
mojtaba
@
۱۷ شهريور ۱۳۸۶-۱۲:۲۱
سلام. يك قرني بود كه به اينجا سر نزده بودم. راستش رو بگم بيش از اون درگيريم كه حتي ايميل هام رو هم چك كنم. اما مي خواهم نتيجه اين همه درگيري اين يك ساله رو كه خيلي مطالب مختلفي هم بهم ياد داد رو يواش يواش همينجا بنويسم. فكر كنم 10-20 تا مقاله بشه البته اگه حوصله كنم و بنويسم. خوب اين از اوليش :
خيلي وقت ها اتفاق مي افتد كه به شماره رديف انتخابي در يك SELECT احتياج پيدا مي كنيم. چند تا روش مختلف وجود داره كه همه براي MS SQL 2000,2005 كار مي كنند.
1- اوليش اينه كه خيلي ساده يه ستون Sub Query كه شامل يك ()SUM است، به SELECT اضافه كنيد. اينطوري :
SELECT (SELECT SUM(1) FROM authors WHERE au_Id<=Ath.au_ID) AS Row_No,
Ath.au_lname FROM authors Ath
البته مشكل اين نوع محاسبه اينه كه حتماً به يك ستون IDENTITY احتياج داره كه بر اساس اون رديف ها رو بشماره كه البته چون معمولاً در همه جدول ها يك همچين چيزي وجود داره مشكلي زيادي پيش نمي آد.ولي اين مسئله باعث كارآيي پايين اين Query مي شه. چرا كه در هر رديف يك بار اين سرجمع حساب مي شه و براي جداول بزرگ احتمالاً با كارايي پاييني همراه خواهد بود.(البته امتحان نكردم ولي بايستي اينطور باشه.)
2 - اين دومي يه كمي دردسر داره ولي مطمئناً همه جا كار مي كنه. اون هم اين كه ابتدا يك جدول موقت با يك ستون IDENTITY ايجاد كنيد (1). بعد اطلاعات انتخابي رو در داخل جدول موقت بريزيد (2) بعد هم با يك انتخاب ازجدول اصلي و اين جدول مجازي ستون IDENTITY رو هم انخاب كنيد (3) كه همون شماره رديف تون خواهد بود.البته جدول موقت كه با يك علامت # قبل از اسمش معرفي ميشه در پايان اتصال به Sql server يعني در بستن SQlConnection خود به خود پاك مي شه ولي براي احتياط كه به مشكلي نخوريد (در صورت بسته نبودن اتصال قبلي) در آخر، جدول موقت رو دستي پاك مي كنيم (4) اينجوري :
-- (1)
CREATE TABLE #RowNumber (
RowNumber int IDENTITY (1, 1),
emp_id char(9) )
-- (2)
INSERT #RowNumber (emp_id)
SELECT emp_id
FROM employee
WHERE job_id = 10
ORDER BY lname
-- (3)
SELECT RowNumber, e.emp_id, lname, fname, job_id
FROM #RowNumber r JOIN employee e
ON r.emp_id = e.emp_id
ORDER BY RowNumber
-- (4)
DROP TABLE #RowNumber
خوبي اين روش اينه كه در تمامي جداول مي شه ازش استفاده كرد و از لحاظ Performance هم مشكلي به نظر نمي آد داشته باشه مگر در اطلاعات واقعاً سنگين كه سرور به رم زيادي احتياج پيدا خواهد كرد.
3 - اين روش فقط در 2005 امكان پذيره چون بالاخره عمو بيل فهميده كه به يه همچين چيزي احتياجه و براي اون يك تابع داخلي گذاشته. تابع ()ROW_NUMBER به همبن منظورطراحي شده كه البته يك بخش OVER هم داره در اين بخش يك عبارت ORDER بايد نوشته شود كه چگونگي شماره رديف زدن رو مشخص مي كند و معمولاً مثل ORDER خود SELECT خواهد بود. اينطوري
SELECT Row_Number() OVER (ORDER BY emp_id) as Row_No, emp_id, lname, fname, job_id
FROM employee e
ORDER BY emp_id
روش بسيار عالي و با Performance بسيار عالي است.
Date 2 Persian In SQL
mojtaba
@
۲۵ شهريور ۱۳۸۵-۱۸:0۲
<div dir="rtl">
<div dir="rtl">چند وقت پيش 1 تابع SQLگذاشتم كه تاريخ ميلادي را به فارسي تبديل مي كرد. يكي از باگهاش امروز در اومد كه درستش كردم مي تونيد فايل جديد رو از <a target="_blank" href="http://behnamonline.net/downloads/dt2per.rar">اينجا</a> بگيريد.</div>
</div>
چند نكته JavaScript
mojtaba
@
۱۰ تير ۱۳۸۵-۱۲:۳۱
<div dir="rtl" align="justify">چند وقته روي يك برنامه تحت وب كار مي كنم كه تقريباً بايد همه كارها توش Client Side انجام بشه و در نتيجه تا دلتون بخواهد از عنصر نامأنوس و احمقانه JavaScript بهره بردم. اما خوب اين سر و كله زدن باعث شد بتونم اين پست رو بدارم و چند تا نكته كه قبلاً نديده بودم را بگم شايد شما هم ندونيد و ياد بگيريد :</div>
<div dir="rtl" align="justify">1- براي دريافت اينكه event درحال انجام از طريق چه tag اي ارسال شده مي تونيد از event.srcElement.tagName استفاده كنيد : مثلاً :</div>
<div dir="ltr" align="left">if (event.srcElement.tagName=='TD'){</div>
<div dir="ltr" align="left">event.srcElement.style.color='yellow';</div>
<div dir="ltr" align="left">}</div>
<div dir="rtl">نمونه خيلي جالب استفاده از اين دستور را مي تونيد <a target="_blank" href="http://www.dynamicdrive.com/dynamicindex11/cal.htm">اينجا</a> ببينيد.</div>
<div dir="rtl"> </div>
<div dir="rtl" align="justify">2- دو متد در آرايه ها هم وجود داره كه شايد خيلي پر كاربرد باشند. اول push كه براي ريختن اطلاعات در يك عضو از آرايه استفاده مي شه.</div>
<div dir="rtl" align="justify"> و دومي <strong>([ <font size="2"><span class="OBJECT">Array.</span><span class="METHOD">splice</span><span class="ARGUMENT">(index, howMany, [element1][, ..., elementN </span></font></strong>كه هم براي اضافه كردن و هم براي حذف كردن اعضاء استفاده مي شه . به اين صورت كه <strong><font size="2">index </font></strong>اي را كه مي خواهيد عضوي را در آن اضافه يا عضوي را از آن حذف كنيد را نوشته و در <font size="2"><strong>howMany </strong>تعداد عضوي از آن را كه بايد حذف شود مي نويسيد. در مواقعي كه قصد افزودن به آرايه را داشته باشيد اين مقدار را صفر وارد كنيد. و بعد اعضاي جديدي را كه مي خواهيد به آرايه اضافه شوند را به ترتيب بنويسيد. همچنين در صورت حذف اعضاء مقدار بازگشتي متد اعضاي حذف شده مي باشند. مثلاً :</font></div>
<div dir="ltr" align="left"><font size="2"><font color="#800080">Code:</font> <br /></font><font color="#0000ff" size="2"><span class="CODE">cars = ["Mercedes", "Ford", "Chrysler", "Honda", "Volvo"] </span></font></div>
<div dir="ltr" align="left"><font color="#0000ff" size="2"><span class="CODE">removed_cars=cars.splice(1,2);</span></font></div>
<div dir="ltr" align="left"><font size="2"><span class="CODE"><font color="#0000ff">document.write(removed_cars + "<br />") ;<br />document.write(cars);</font></span> </font></div>
<font size="2">
<div dir="ltr" align="left"><br /><font color="#339966"><font color="#800080">Output:</font> </font></div>
<div dir="ltr" align="left"><font color="#339966"><span class="OUTPUT">Ford,Chrysler</span><br /><span class="OUTPUT">Mercedes,Honda,Volvo</span></font></div>
<div dir="ltr" align="left"><font color="#000000"><span class="OUTPUT"></span></font> </div>
<div dir="ltr" align="left"><font color="#000000"><span class="OUTPUT"></span></font> </div>
<div dir="ltr" align="left"><font color="#000000"><span class="OUTPUT"><font color="#800080">Code: <br /></font><span class="CODE"><font color="#0000ff">cars = ["Mercedes", "Ford", "Chrysler", "Honda", "Volvo"] <br />cars.splice(1, 0, "Citreon") ;<br />document.write(cars)</font></span> ;<br /><font color="#800080"> <br />Output:</font> <br /><span class="OUTPUT"><font color="#339966">Mercedes,Citreon,<span class="OUTPUT">Ford,Chrysler,</span>Honda,Volvo</font></span></span></font></div>
</font>
عروسي
mojtaba
@
۳۰ فروردين ۱۳۸۵-۱۰:۴۰
<div dir="rtl" align="justify">اگه خدا بخواهد و مشكل پيش نياد، پنچشنبه آينده 7/2/1385 مراسم عروسي اينجانب برگزار مي شه. محل عروسي هم شهر جهرم تو استان فارس است. از همين جا همه دوستان را به شركت در اين جشن دعوت مي كنم. (البته چون مي دونم كسي نمي آيد!!!) التماس دعاي شديد خدمت كليه دوستان دارم.</div>
Kelk 2000
mojtaba
@
۲۳ فروردين ۱۳۸۵-۱۵:۳۰
<div dir="rtl" align="justify"> چند روزي بود كه دنبال برنامه كرك شده Kelk 2000 مي گشتم. تا اينكه ديروز از يك سايت عربي دانلود كردم. ظاهرا شركت <a href="http://www.sinapardazeshsoft.com">سينا پردازش</a>، تهيه كننده برنامه اون رو به قيمت 140.000 تومان به فروش مي رسونه. كه البته نوش جونشون چون خيلي زحمت كشيدن. ولي ما بيچاره ها كه از اين پول ها نداريم و عشق خط هم داريم مجبوريم كرك شده اش رو پيدا كنيم . در هر صورت براي اين شركت مفخم آرزوي بهروزي و فروش فراوان محصول را دارم.</div>
سال نو مبارك
mojtaba
@
۲۵ اسفند ۱۳۸۴-۱۲:۱۶
<div dir="rtl"><font face="Tahoma" size="2">به همه دوستان سال نو را تبريك مي گم و اميدوارم سال خوب و پر از موفقيتي را پيش رو داشته باشين. اگه خدا بخواد از امروز تا آخر تعطيلات در حال سفر به دور ايرانم. </font></div>
<div dir="rtl"><font face="Tahoma" size="2"><strong>دست حق به همراهتون</strong> </font></div>
تبديل تاريخ ميلادي به شمسي در SQL
mojtaba
@
۱۳ اسفند ۱۳۸۴-۱۵:۳۹
<div dir="rtl">امروز از درد مجبوري براي اينكه با CrystalReport مي خواستم كار كنم مجبور شدم يه تابع در SQL بنويسم كه يه تاريخ ميلادي بگيره و يه متن شامل تاريخ شمسي برگردونه .</div>
<div dir="rtl">يه خورده خر كاريه اما در بعضي جاها مثل نمايش اطلاعات در گزارشهاي CrystalReport خيلي به كار مياد. اميدوارم به كارتون بياد. در ضمن اگه دوستان در Debug اون بهم كمك كنند كلي دعاگوشون مي شم.فايل متن اون رو ميتونيد از <a title="3.31 kb" href="http://benyblack.com/downloads/Function.sql">اينجا </a>بگيريد </div>
شام مهتاب
mojtaba
@
۸ اسفند ۱۳۸۴-۱۲:۴۶
<div dir="rtl">
<table cellspacing="0" cellpadding="0" width="470" border="0">
<tbody>
<tr>
<td>
<p align="justify"><font size="1">تو اون شام مهتاب کنارم نشستی<br /><br />قلم زد نگاهت به نقش آفرینی<br /><br />پریزاد عشق رو مهاسا کشیدی<br /><br />تو دونسته بودی <span lang="fa">چه</span> خوش باورم من<br /><br />تا گفتم کی هستی تو گفتی یه بیتاب<br /><br />قسم خوردی بر ما که عاشق ترینی<br /><br />همون لحظه ابری رخ ماه رو آشفت <br /><br />گذشت روزگاری از اون لحظه ی ناب<br /><br />در اون درگه عشق چه مهتاج نشستم<br /><br />تو از این شکستن خبر داری یا نه<br /><br />تو دونسته بودی <span lang="fa">چه</span> خوش باورم من<br /><br />تا گفتم کی هستی تو گفتی یه بیتاب<br /><br />قسم خوردی بر ما که عاشق ترینی<br /><br />همون لحظه ابری رخ ماه رو آشفت <br /><br />هنوز<span lang="fa">م</span> توی شبهات اگه ماه رو داری<br /><br />هنوز<span lang="fa">م</span> توی شبهات اگه ماه رو داری</font></p>
</td>
<td>
<p align="justify"><font size="1"><span lang="fa">عجب</span> شاخه گل وار به پایم شکستی<br /><br />که صورتگری را نبود این چنینی<br /><br />خدا را به شور تماشا کشیدی<br /><br />شکفتی و گفتی که از عشق پرپرم من<br /><br />تا گفتم دلت کو تو گفتی که دریاب<br /><br />تو یک جمع عاشق تو صادق ترینی<br /> <br />به خود گفتم ای وای مبادا دروغ گفت<br /><br />که معراج دل بود به درگاه مهتاب<br /><br />تو هر شام مهتاب به یادت شکستم<br /><br />هنوز شور عشق رو به سر داری یا نه<br /><br />شکفتی و گفتی از عشق پرپرم من<br /><br />تا گفتم دلت کو تو گفتی که دریاب<br /><br />تو یک جمع عاشق تو صادق ترینی<br /> <br />به خود گفتم ای وای مبادا دروغ گفت<br /><br />من اون ماه رو دادم به تو یا دگاری<br /><br />من اون ماه رو دادم به تو یادگاری</font></p>
</td>
</tr>
</tbody>
</table>
</div>
دعاي خير
mojtaba
@
۱۷ بهمن ۱۳۸۴-۱۰:۵۲
<div dir="rtl" align="justify">ايام شهادت امام حسين (ع) را به همه تسليت عرض مي كنم. و از همه دوستان التماس دعا دارم. ما را فراموش نكنيد. </div>
<div dir="rtl" align="justify">چو از اين كوير وحشت به سلامتي گذشتي</div>
<div dir="rtl" align="justify">به بنفشه ها به باران برسان سلام ما را</div>
التماس دعا
mojtaba
@
۱ بهمن ۱۳۸۴-۱۱:۳۱
<div dir="rtl" align="justify"> متأسفانه يا خوشبختانه دوستان تهراني كه مي بينند، چه برفي مياد . من هم بايد امروز نزديك 15 ساعت مسافرت كنم . از تهران به جهرم. اصلاً از اين وضع هوا خوشم نمياد. خدا بهم رحم كنه. تا اصفهان خبري نيست چون يه تكه اتوبانه ، اما از اصفهان تا شيراز رو خدا به خير بگذرونه... </div>
فسیل
mojtaba
@
۲۶ دي ۱۳۸۴-0۰:۴۶
<div dir="rtl">تازه این یکی دو روزه فهمیده ام که واقعاً فسیل شده ام. دیگه حوصله سابق رو ندارم. زود خسته می شوم، هوب دیگه اگه پرگاز شروع کنی زود هم بنزین تمام می کنی.....</div>
به کجا چنین شتابان؟
mojtaba
@
۲۵ دي ۱۳۸۴-۲۱:۵۱
<div dir="rtl">به کجا چنین شتابان؟ گون از نسیم پرسید<br />دل من گرفته زینجا , هوس سفر نداری؟<br />ز غبار این بیابان؟<br />همه آرزویم اما.... چه کنم که بسته پایم....<br />به کجا چنین شتابان؟<br />به هر آن کجا که باشد بجز این سرا سرایم<br />سفرت به خیر اما تو و دوستی خدا را <br />چو از این کویر وحشت به سلامتی گذشتی, به شکوفه ها به باران<br />برسان سلام ما را.<br /><br /> </div>
Extended Porperty
mojtaba
@
۲۵ دي ۱۳۸۴-۲۱:۲۴
<p dir="rtl" align="justify">دیروز برای کامنت گذاری کدهای برنامه جدیدمون به Description فیلدهای دیتابیس احتیاج پیدا کردیم.کلی گشتم ولی هیچ نوع تابع توکاری برای گرفتن این گزینه پیدا نکردم. تا اینکه بهنام کشف کرد که این خصیصه جزو Extended Properties است. این نوع خصیصه ها برای هر فیلد تا 32 مورد (تا اونجایی که تو ذهنم است) تعریف می شوند. می توانید با هر نام و مقدار دلخواه آنها را ست نمایید. برای ست کردن آنها از Query Analyzer کافی است روی فیلد مورد نظرتان کلیک راست کرده و گزینه ExtendedProperties را انتخاب نمایید. سپس مقادیر جدید یا موجود را ست نمایید.</p>
<p dir="rtl">برای دسترسی به این خصایص چند تابع توکار SQL وجود دارد که در بخش پایین براتون می نویسم.<br /> اضافه کردن : </p>
<p dir="ltr" align="left"><font color="#0000ff">sp_addextendedproperty [ name ] , [ value ] , [ level0type ] , [ level0nam ] , [ level1type ] , [ level1name] , [ level2type ] , [ level2name ] , [ level2type]<br /></font> </p>
<div dir="rtl" align="right">مثال :</div>
<p dir="ltr" align="left"><font color="#0000ff">EXEC</font> <font color="#0000ff">sp_addextendedproperty</font> 'caption' , 'Employee ID' , 'user' , 'dbo' , 'table' , 'T1' , 'column' , 'id' </p>
<div dir="rtl" align="right">به روزرسانی :</div>
<p dir="ltr" align="left"><font color="#0000ff">sp_updateextendedproperty [ name ] , [ value ] , [ level0type ] , [ level0nam ] ,[ level1type ] , [ level1name] , [ level2name ] , [ level2type ] , [ level2type ]</font></p>
<p dir="rtl">حذف :</p>
<p dir="ltr" align="left"><font color="#0000ff">sp_dropextendedproperty [ name ] , [ level0type ] , [ level0name ] ,[ level1type ] , [ level1name] , [ level2type ] , [ level2name ] , [ level2type ]</font></p>
<p dir="rtl"><span lang="fa">برای گرفتن مقدار یک خصیصه هم از تابع زیر استفاده کنید :</span></p>
<p dir="ltr" align="left"><font color="#0000ff">FN_LISTEXTENDEDPROPERTY <span lang="fa">(</span> [ name ] , [ level0type ] , [ level0name ] ,[ level1type ] , [ level1name] , [ level2type ] , [ level2name ] , [ level2type ]<span lang="fa"> )</span></font></p>
<p dir="rtl"><span lang="fa">مثال :</span></p>
<div dir="ltr" align="left"><font color="#0000ff">SELECT</font> [value]<span lang="fa"> </span><font color="#0000ff">FROM ::FN_LISTEXTENDEDPROPERTY</font>( 'Caption' , 'User' , 'dbo' , 'table' , 'TestExProp' , 'culomn' , 'id') </div>
<p dir="rtl"><span lang="fa">توجه داشته باشید اگر مقدار </span>Description<span lang="fa"> فیلد خاصی از جدولتان را احتیاج دارید به جای نام در توابع بالا </span>MS_Description<span lang="fa"> قرار دهید.</span></p>
Open Object Database
mojtaba
@
۱۸ دي ۱۳۸۴-۱۴:۳۰
<div dir="rtl" align="justify">خوب اگه خدا بخواهد، ديشب ساعت 4 صبح ديتابيس و كنترل پنل مربوط به اون تموم شد. اين برنامه هرنوع Object را بدون در نظر گرفتن تعداد و نوع فيلدهاي آن در ديتابيس قرار مي دهد و مي توانيد به آن ديتا اضافه و كم نماييد. توي اين ديتابيس جدول اضافه و كم نمي شه، بلكه جدول ها طوري طراحي شده اند كه هر نوع Object را در خود جاي دهند. ان شاء الله وقتي كامل شد يه مقاله خوب ازش همينجا مي گذاريم. </div>
من اينجا بس دلم تنگ است
mojtaba
@
۱۲ دي ۱۳۸۴-۲۱:۳۴
<div dir="rtl">بي تو مهتاب شبي باز از آن كوچه گذشتم</div>
<div dir="rtl">همه تن چشم شدم خيره به دنيال تو گشتم</div>
<div dir="rtl">شوق ديدار تو لبريز شد از جام وجودم</div>
<div dir="rtl">شدم ان عاشق ديوانه كه بودم ...</div>
<div dir="rtl">سالهاست كه منتظرم ...... سالهاست كه قول داده ام ..... </div>
EXPORT DATA
mojtaba
@
۱۲ دي ۱۳۸۴-۱۵:۲۹
<div dir="rtl" align="justify">اين مرتضي بعضي وقتا سوال هاي خوبي مي پرسه. حيفم اومد جوابش را براي بقيه هم ننويسم. معمولاً براي پشتيبان گيري از ديتابيس بايد از دستور BACKUP استفاده كرد. ولي بعضي جاها كاربرد نداره. چون ما فقط اطلاعات يك جدول را احتياج داريم. اونم در يك پايگاه ديگه. مثلاً شما احتياج داريد از جدول اخبار سايتتان هر روز بر روي يك سرور Local پشتيبان بگيريد. چكار مي كنيد؟؟؟؟؟</div>
<div dir="rtl" align="justify">يه راه ساده داره، راههاي ديگه هم داره كه كاريشون نداريم. مي تونيد يك INSERT چندگانه با استفاده از SELECT انجام بدهيد. اما قبل از اون بايد يه كار انجام بديد. اگر احياناً فيلد Identity داريد، بايد اجازه ورود اطلاعات در آن را بدهيد. يعني خصيصه <strong>IDENTITY_INSERT</strong> را براي جدول اخبار فعال كنيد. همچنين يادتون باشه كه :</div>
<div dir="rtl" align="justify"><strong>1) بايد با كاربرتان به هر دو ديتابيس دسترسي داشته باشيد.</strong></div>
<div dir="rtl" align="justify">2) بايد ليست فيلدها را بنويسيد، از * نمي شه استفاده كرد.</div>
<div dir="rtl" align="justify">3) آدرس جداول را بايد به طور <strong>كامل</strong> بدهيد </div>
<div dir="rtl" align="justify">[Host Name].[Database Name].[Owner].[TableName]</div>
<div dir="rtl" align="justify">4) خصيصه IDENTITY_INSERT را بلافاصله بعد از تمام شدن كپي ydv فعال كنيد</div>
<div dir="rtl" align="justify">نمونه كدهاش را پايين مي بينيد :</div>
<div dir="rtl" align="left"><font color="#0000ff">SET IDENTITY_INSERT</font> Localhost.test.dbo.News <font color="#0000ff">ON</font><br />GO<br /><font color="#0000ff">INSERT INTO </font>Localhost.test.dbo.News ( [ID], [Title], [Body]) <font color="#3366ff"><font color="#0000ff">SELECT </font></font>[ID], [Title], [Body] <font color="#0000ff">FROM </font><font color="#000000">RemoteHOST.DNE.Mojtaba.News <br />GO<br /></font>
<div dir="rtl" align="left"><font color="#0000ff">SET IDENTITY_INSERT</font> Localhost.test.dbo.categories <font color="#0000ff">OFF</font><br />GO</div>
<div dir="rtl" align="justify">موفق باشيد.<br /></div>
</div>
NULLIF & ISNULL
mojtaba
@
۱۲ دي ۱۳۸۴-۱۱:۱۰
<div dir="rtl" align="justify">يه مطلب كوچك و جالب از به كارگيري دستورات داخلي SQL امروز به ذهنم رسيد ديدم بد نيست بگم. در طراحي جدول ها هميشه اين اصول را رعايت كنيد :</div>
<div dir="rtl" align="justify"> 1)تمامي فيلدها را Not Null كنيد.</div>
<div dir="rtl" align="justify"> 2)براي تمامي فيلدها مقدار پيش فرض تعيين كنيد.</div>
<div dir="rtl" align="justify">خوب با اين كار خيلي از مسائل و مشكلات مربوط به Null حل مي شه. اما يه مشكل جديد پيش مياد!!!!! اونم اين كه اگه جايي بخواهيد از فيلدهايي كه وارد شده آمار بگيريد، به مشكل برمي خوريد.مثلاً در يك جدول شما اطلاعات مشتريان خود را نگه مي داريد و مي خواهيد بفهميد كه ميانگين سن مشتريان شما چقدر است. از اونجا كه شما براي همه فيلدها مقدار پيش فرض تعيين كرده ايد بنابراين همه ركوردها داراي مقدار هستند، هر كس اين فيلد را وارد نكرده باشد، مقدار مثلاً صفر(صفر مقدار پيش فرض است) در فيلد ثبت شده است. و در نتيجه ميانگين سن اشتباه به دست مي آيد. بايد به وسيله اي مقادير صفر را حذف كنيم.</div>
<div dir="rtl" align="justify">راه حل استفاده از تابع توكار<strong> ( NULLIF ( <em>expression1 </em>, </strong><em><strong>expression2</strong> </em><strong> </strong>مي باشد.اين تابع، مقدار دلخواه شما رو با NULL عوض مي كنه. expression1 نام فيلد يا تابع يا ... است كه مي خواهيد از لحاظ مقدار چك شود و expression2 مقدار مورد نظر (مقدار پيش فرض فيلد) است. مثلاً در مثال فوق(<strong>(</strong>Avg(<strong> NULLIF([Age],0</strong> مقادير صفر را با Nullعوض مي كند در نتيجه در تابع AVG حساب نمي شوند.</div>
<div dir="rtl" align="justify">يك تابع هم داريم كه عكس اين تابع عمل مي كنه اونم<strong> ( ISNULL ( expression1 , expression2 .</strong>اين تابع مفادير Null را به مقدار دلخواه شما تغيير مي ده. <strong>expression1</strong> نام فيلد يا تابع يا ... است كه مي خواهيد از لحاظ مقدار چك شود و <strong>expression2 </strong>مقداري است مي خواهيد با Null جايگزين بشه.</div>
سال نوي ميلادي مبارك
mojtaba
@
۱۱ دي ۱۳۸۴-۱۱:0۵
<div dir="rtl">سال نوي ميلادي را به همه تبريك مي گم . ان شاء الله كه سالي پر رونق و پر از موفقيت براي همه تون باشه. اين چند روزه با يك برنامه جديد، سر و كله مي زنيم (همراه اوستا) . بعد از مدتها واقعاً هيجان انگيز شده . يك ديتا بيس كاملا شناور بدون هيچ نوع محدوديت . البته يه جورايي دردسرهاي خاص خودش رو داره ولي مي شه گفت واقعاً معركه است. اگه خدا بخواهد، يك مقاله خوب ازش به كمك بهنام مي گذاريم . فعلاًً دست حق همراهتون.</div>
سلام ما دوباره اومديم!!!!!!
mojtaba
@
۸ دي ۱۳۸۴-۱۹:۱۷
<div dir="rtl">سلام به دوستان عزيز . از اونجا كه اين چند وقته كه تو تهرانم اينترنت تركوندم، تصميم گرفتم دوباره يه مطالبي بنويسم.</div>
<div dir="rtl">فعلاً يا علي. </div>