محتویات سایت
        برچسب های محبوب 








 
   نقل قول (Quotation) در SQL Server
  کار با کاراکتر تک کوتیشن (') برای شروع سخت به نظر می رسد، بوِیژه در بحث Dynamic SQL این پیچیدگی دیده می شود. اما با مطالعه ی این Tip شما در پروژه هایتان به سادگی با این موضوع کنار خواهید آمد.
   SQL Server
   ۱۷۲۰۰
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۸۹/۳/۱۰
نسخه قابل چاپ نسخه قابل چاپ

خیلی از افرادی که تازه شروع به کار با SQL Server کرده اند ممکن است با بکار گیری کاراکتر ' (تک کوتیشن/single quotation mark/Apostrophe) داخل یک رشته با مشکل مواجه شده باشند. همانطور که می دانید برای اینکه عبارتی را به عنوان یک رشته در نظر بگیریم باید آن را داخل دو تک کتشین قرار دهیم. ولی چگونه می توانیم از کاراکتر ' در داخل رشته استفاده کنیم؟ جواب ساده است، هر کاراکتر ' را باید دوبار بنویسم.

فرض کنید می خواهیم عبارت I'm a computer sciences student را با دستور SELECT نمایش دهیم. (به علامت کوتیشن داخل رشته توجه کنید)

SELECT 'I''m a computer sciences student' AS [Result];
/*
Result
-------------------------------
I'm a computer sciences student
*/

حالا شرایط کوتیشن را در Dynamic SQL به جای Static SQL مورد بررسی قرار می دهیم.
فرض کنید همین عبارت فوق را می خواهیم به صورت پویا با دستور EXEC اجرا کنیم. در این حالت ناچاریم که تمام عبارت را داخل یک رشته تصور کنیم و رشته را با کمک EXEC اجرا کنیم. ببینیم چگونه می شود این کار را انجام داد:

--SELECT 'I''m a computer sciences student' AS [Result];
SELECT 'SELECT ''I''''m a computer sciences student'' AS [Result];' AS [SELECT Statement]
EXECUTE ('SELECT ''I''''m a computer sciences student'' AS [Result];');
/*
SELECT Statement
------------------------------------------------------
SELECT 'I''m a computer sciences student' AS [Result];

Result
-------------------------------
I'm a computer sciences student
*/

خیلی ساده است. در واقع هر کاراکتر تک نقل قولی که در عبارت SELECT وجود دارد را با دابل تک کوتشین نمایش می دهیم. و کل عبارت را داخل دو تک کوتشن قرار داده تا عبارت تبدیل به رشته شود.

بجای اینکه از کاراکتر تک کوتیشن دوبار پشت سر هم استفاده کنیم، می توانیم کاراکتر را با کمک کد اسکی آن همراه با تابع CHAR نمایش دهیم. کد اسکی این کاراکتر برابر با 39 است. پس اولین مثال را می توانیم به شکل زیر در آوریم. یعنی رشته را در جایی که نیاز به نمایش این کاراکتر هست را دو تکه کرده و تبدیل به دو عبارت مسقل رشته می کنیم سپس کاراکتر مورد نظر را با کمک تابع CHAR انتخاب نموده و در نهایت سه رشته را با دو عملگر + به همدیگر الحاق می کنیم:

SELECT 'I' + CHAR(39) + 'm a computer sciences student' AS [Result];

تابعی نیز وجود دارد که رشته ی ورودی را داخل یک جفت تک کوتیشن قرار می دهد (یا بدون مشخص کردن پارامتر دوم آن را داخل [] قرار می دهد):

SELECT 'SELECT ''I''''m a computer sciences student'' AS [Result];'
--Equivalence
SELECT 'SELECT ' + QUOTENAME('I''m a computer sciences student'CHAR(39)) + ' AS [Result];'