PDA

View Full Version : اشتباهات لُپی در T-SQL



m_omrani
چهارشنبه 22 دی 1389, 12:23 عصر
فکر کنم بحث جالبی باشه.
هر کسی ممکنه در T-SQL اشتباه داشته باشه. مقصودم اشتباهات فردی، تایپی یا اشتباهات سهوی ایه که از دست آدم در می ره و اصطلاحاً بهشون می گیم اشتباه لُپی.

طبعاً مبتلی به این اشتباهات عموماً SQL Server Programmer ها هستن که بیشتر با T-SQL سروکار دارن نه SQL Server Admin ها. خصوصاً برای من که شخصاً ترجیح می دم منطق کسب و کار (Bussiness) رو در سطح SP پیاده سازی کنم، حجم کُدنویسی T-SQL ام (خصوصاً در SP های دستکاری داده (Data Manipulation) ) زیاده.

این اشتباهات خیلی حال آدمو می گیرن، چون مدت زیادی وقت برای دیباگ ازت می گیره و بعد از یک عالم حرص خوردن و بالا رفتن فشار خون و زخم معده گرفتن و بدوبیراه نثار SQL Server کردن، آخرش متوجه می شی یک اشتباه سهوی از خودت بوده!

مثلاً بعضی از خطاهای من اینها بوده:

1. فراموش کردن کلمه OUT برای پارامتر خروجی در یک SP


exec dbo.myStoredProc @a,@b,@c

و مثلاً پارامتر @b از نوع خروجی بوده و من یادم رفته بود بنویسم.

2. یکی نوشتن اسم جدول در دو طرف JOIN !



select ...
from Table1 a1
inner join Table2 a2 on a1.Field1 = a2.Field1
inner join Table3 a3 on a2.Field2 = a3.Field2
inner join Table4 a4 on a4.Field3 = a4.Field4
where ....



این دیگه خیلی نوبره!

2. اشتباه در استفاده از Data Type:
مثلاً یک بار در یک SP برای بررسی وضعیت چیزی از نوع داده Tiny Int استفاده کرده بودم. چون می خواستم بسته به هر حالت یک عدد رو برگردونم و دقیقاً هر حالت هم برام مهم بود. مقدار رو 1 هم به معنای ok بودن وضعیت گرفته بودم. بعداً وقتی این SP رو Call می کردم، برای نوع داده پارامتر خروجی، به جای Tiny Int از Bit استفاده کرده بودم، لذا بعد از اجرای SP همیشه وضعیت ok بود!



declare @state bit
...
exec dbo.checkState @param1,@param2,@state out
if @state = 1
-- everything is ok
else
-- something is wrong.


4. اشتباه نوشتن اسم جدول!



select a1.Data1,a1.Data2,a2.Data1,a3.Data2,a4.Data2
from Table1 a1
inner join Table2 a2 on a1.Field1 = a2.Field1
inner join Table3 a3 on a2.Field2 = a3.Field2
inner join Table4 a4 on a4.Field3 = a4.Field4
where ....



5. اشتباه نوشتن اسم فیلد!



select a1.Data1,a2.Data1,a1.Data2,a3.Data1,...
from Table1 a1
inner join Table2 a2 on a1.Field1 = a2.Field1
inner join Table3 a3 on a2.Field2 = a3.Field2
inner join Table4 a4 on a4.Field3 = a4.Field4
where ....



البته شاید بعضی هاش با اسکریپت هایی که نوشتم خیلی واضح نباشه. اما دوستانی که با این حالات برخورد کرده باشن می دونن چی می گم!

ممکنه بگید اینها که خیلی واضحه. اما باید براتون پیش بیاد تا بفهمید چی می گم! :لبخندساده: