এসকিউএল সার্ভারে আমার কখন সেমিকোলন ব্যবহার করা উচিত?


221

ওয়েবে কিছু কোড এবং এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর দ্বারা নির্মিত স্ক্রিপ্টগুলি পরীক্ষা করার সময় আমি লক্ষ্য করেছি যে কিছু বিবৃতি একটি সেমিকোলন দিয়ে শেষ হয়েছে।

সুতরাং আমি কখন এটি ব্যবহার করব?


23
এসকিউএল সার্ভার ২০০৮ আর 2 এমএসডিএন.মিকায়সফ্রোসফেস /en-us/library/ms177563.aspx "লেনদেন-এসকিউএল সিনট্যাক্স কনভেনশন (ট্রানজেক্ট-এসকিউএল)" ; == লেনদেন-এসকিউএল স্টেটমেন্ট টার্মিনেটর। যদিও এসকিউএল সার্ভারের এই সংস্করণে বেশিরভাগ বিবৃতিগুলির জন্য সেমিকোলন প্রয়োজন হয় না তবে এটি ভবিষ্যতের সংস্করণে প্রয়োজন হবে
জেরি লওরি

2
যদিও তারা দাবি করে যে একটি সেমিকোলন ভবিষ্যতের সংস্করণে প্রয়োজন হবে এটি কখনই সত্য হবে না। উপযুক্ততার কারণে তারা এটিকে কখনই আদেশ দিতে পারে না। এটি প্রায় 100% অ্যাপ্লিকেশন ভঙ্গ করবে।
usr ডিরেক্টরির

1
এটি এখন 2019 এবং এসকিউএল সার্ভারের সর্বশেষ সংস্করণে কোনও সেমিকোলন এখনও আনন্দের সাথে গ্রহণ করা হয়নি। যেমন @ অ্যাসার বলেছেন, মাইক্রোসফ্ট যদি 100% ক্লিন ব্রেক না করতে চায়, তারা এটিকে প্রয়োগ করার কোনও উপায় নেই।
ইয়ান কেম্প

উত্তর:


151

কেন পাওয়ারের একটি এসকিউএল সার্ভারসেন্ট্রাল.কম নিবন্ধ থেকে :

সেমিকোলন

সেমিকোলন চরিত্রটি একটি বিবৃতি টার্মিনেটর। এটি এএনএসআই এসকিউএল -২৯ স্ট্যান্ডার্ডের একটি অংশ, তবে লেনদেন-এসকিউএল-এর মধ্যে কখনও ব্যবহৃত হয়নি। আসলে, কখনও কখনও কোনও সেমিকোলনের মুখোমুখি না হয়ে টি-এসকিউএল কোড করা সম্ভব হয়েছিল।

ব্যবহার

দুটি পরিস্থিতি রয়েছে যেখানে আপনাকে অবশ্যই সেমিকোলনটি ব্যবহার করতে হবে। প্রথম পরিস্থিতিটি যেখানে আপনি একটি সাধারণ টেবিল এক্সপ্রেশন (সিটিই) ব্যবহার করেন এবং সিটিই ব্যাচের প্রথম বিবৃতি নয়। দ্বিতীয়টি যেখানে আপনি পরিষেবা ব্রোকারের বিবৃতি দেন এবং পরিষেবা ব্রোকারের বিবৃতি ব্যাচের প্রথম বিবৃতি নয়।


9
কি THROWকোনো পরিষেবার ব্রোকার বক্তব্য? এই উদাহরণে নিক্ষেপ করার আগে আমাদের একটি আধা-কোলন অন্তর্ভুক্ত করতে হবে:BEGIN ;THROW @Error, 'Invalid FundingID', 2; RETURN END
ক্রিস ওয়ালশ

1
দেখে মনে হচ্ছে তারা সাম্প্রতিক বছরগুলিতে চালু হওয়া সমস্ত নতুন বিবৃতি ধরণের আগে এটি প্রয়োজনীয়তার সাথে সাধারণভাবে সেমিকোলনের ব্যবহারকে উত্সাহিত করছে। ( MERGEখুব উদাহরণস্বরূপ)। অন্যান্য
উত্তরে

2
@ মরমোক্যাম আমার মনে হয় আপনি ডকুমেন্টটি ভুলভাবে পড়েছেন। আপনি যদি সেই লিঙ্কটি লক্ষ্য করেন তবে এটিতে বলা হয় " অর্ধবৃত্তের সাথে লেনদেন-এসকিউএল বিবৃতি শেষ হচ্ছে না ।" অবচয় করা হয়।
কলটার

আমি এটা দেখতে, এই সত্যিই যখন এক প্রশ্নে সুরাহা না করা উচিত (যেমন বিরোধিতা আবশ্যক ) একটি সেমিকোলন ব্যবহার করুন।
স্টুয়ার্ট

81

ডিফল্টরূপে, এসকিউএল স্টেটমেন্টগুলি সেমিকোলন দিয়ে সমাপ্ত হয়। আপনি স্টেটমেন্টটি বন্ধ করতে একটি সেমিকোলন ব্যবহার করেন যদি না আপনি (খুব কম) নতুন স্টেটমেন্ট টার্মিনেটর সেট করেন set

আপনি যদি কেবল একটি বিবৃতি প্রেরণ করেন তবে প্রযুক্তিগতভাবে আপনি বিবৃতি টার্মিনেটরের সাথে সরবরাহ করতে পারেন; একটি স্ক্রিপ্টে, আপনি যেমন একাধিক বিবৃতি প্রেরণ করছেন, আপনার এটির প্রয়োজন।

অনুশীলনে, সর্বদা টার্মিনেটর অন্তর্ভুক্ত করুন এমনকি যদি আপনি কেবল ডেটাবেসে একটি বিবৃতি প্রেরণ করেন।

সম্পাদনা করুন: তাদের বক্তব্যগুলির জবাবে টার্মিনেটরগুলির [বিশেষত আরডিবিএমএস] প্রয়োজন হয় না, যদিও এটি সত্য হতে পারে, এএনএসআই এসকিউএল স্ট্যান্ডার্ড দ্বারা তাদের প্রয়োজনীয়। সমস্ত প্রোগ্রামিংয়ে, যদি আমরা কার্যকারিতা না হারিয়ে কোনও স্ট্যান্ডার্ড মেনে চলতে পারি তবে আমাদের উচিত, কারণ তখন আমাদের কোড বা আমাদের অভ্যাসগুলি কোনও মালিকানাধীন বিক্রেতার সাথে আবদ্ধ নয়।

কিছু সি সংকলক দিয়ে, মূল রিটার্নটি শূন্য হওয়া সম্ভব, যদিও স্ট্যান্ডার্ডের কাছে মেটা ইন্ট ফেরার প্রয়োজন হয়। তবে এটি করা আমাদের কোডকে এবং নিজেরাই কম বহনযোগ্য makes

কার্যকরভাবে প্রোগ্রামিংয়ের বৃহত্তম অসুবিধাটি নতুন জিনিস শিখছে না, এটি খারাপ অভ্যাসটি প্রকাশ করছে। প্রথমদিকে খারাপ অভ্যাস অর্জন করা যে পরিমাণে আমরা এড়াতে পারি, এটি আমাদের পক্ষে, আমাদের কোডের জন্য, এবং যে কেউ আমাদের কোড পড়ছেন বা ব্যবহার করছেন তার পক্ষে এটি একটি জয়।


26

এসকিউএল ২০০৮ বিএল-এ তারা বলেছে যে পরবর্তী প্রকাশে সেমিকোলনগুলির প্রয়োজন হবে। অতএব, সর্বদা এটি ব্যবহার করুন।

রেফারেন্স:


25

আপনার অবশ্যই এটি ব্যবহার করা উচিত

বিবৃতি সমাপ্ত করতে একটি সেমিকোলন ব্যবহারের অনুশীলন মানসম্মত এবং বাস্তবে অন্যান্য বেশ কয়েকটি ডাটাবেস প্ল্যাটফর্মের প্রয়োজন। এসকিউএল সার্ভারের কেবলমাত্র নির্দিষ্ট ক্ষেত্রে সেমিকোলন প্রয়োজন — তবে যে ক্ষেত্রে সেমিকোলন প্রয়োজন হয় না, সেগুলি ব্যবহার করে সমস্যা হয় না। আমি দৃ strongly়ভাবে প্রস্তাব দিচ্ছি যে আপনি একটি সেমিকোলন দিয়ে সমস্ত বিবৃতি বন্ধ করার অনুশীলন অবলম্বন করুন। এটি কেবল আপনার কোডের পঠনযোগ্যতার উন্নতি করবে না, তবে কিছু ক্ষেত্রে এটি আপনাকে কিছুটা দুঃখও বাঁচাতে পারে। (যখন একটি সেমিকোলন প্রয়োজন হয় এবং নির্দিষ্ট না করা হয়, এসকিউএল সার্ভারের ত্রুটি বার্তাটি সবসময় খুব পরিষ্কার থাকে না))

এবং সবচেয়ে গুরুত্বপূর্ণ:

এসকিউএল সার্ভার ডকুমেন্টেশন ইঙ্গিত দেয় যে টিম-এসকিউএল স্টেটমেন্টগুলিকে একটি সেমিকোলন দিয়ে শেষ না করা একটি অবচিত বৈশিষ্ট্য। এর অর্থ দীর্ঘমেয়াদী লক্ষ্যটি হল পণ্যটির ভবিষ্যতের সংস্করণে সেমিকোলনের ব্যবহার কার্যকর করা। আপনার সমস্ত বিবৃতি শেষ করার অভ্যাসে প্রবেশের এটি আরও একটি কারণ, যেখানে বর্তমানে এটির প্রয়োজনীয়তা নেই।

উত্স: মাইক্রোসফ্ট এসকিউএল সার্ভার ২০১২ টি-এসকিউএল ফান্ডামেন্টাল ইটজিক বেন-গান।


আপনাকে সর্বদা কেন ব্যবহার ;করতে হবে তার একটি উদাহরণ হ'ল নিম্নলিখিত দুটি প্রশ্নের (এই পোস্ট থেকে অনুলিপি করা ):

BEGIN TRY
    BEGIN TRAN
    SELECT 1/0 AS CauseAnException
    COMMIT
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE()
    THROW
END CATCH

এখানে চিত্র বর্ণনা লিখুন

BEGIN TRY
    BEGIN TRAN
    SELECT 1/0 AS CauseAnException;
    COMMIT
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE();
    THROW
END CATCH

এখানে চিত্র বর্ণনা লিখুন


7
এটি দৃ strong় যুক্তি বলে মনে হচ্ছে যে আপনি সেমিকোলনগুলি ব্যবহার করতে হবে (উদ্ধৃতিগুলির ব্যাক আপযুক্ত), তবে কেবলমাত্র একক ক্ষেত্রে যেখানে আবশ্যক রয়েছে
গ্রেগোর টমাস

3
@ গ্রেগর, যদি ঘোষণা করা হয় যে সেমিকোলন ব্যবহার করা একটি আবশ্যক এবং অবহিত not using themকৌশল হিসাবে আপনার ব্যবহার করা উচিত। তা না হলে ভবিষ্যতে ভোগার ঝুঁকি রয়েছে। আপনি যদি চাকরী আপগ্রেড / স্যুইচ করার পরিকল্পনা না করে থাকেন এবং সর্বদা এসকিউএল সার্ভার 2000 এর সাথে কাজ করতে যান তবে আপনি নিরাপদ :-)
7

5
ঠিক, should , আমি একমত। কিন্তু তিনি আপনি উত্তর প্রথম লাইন উপর জোর দেয় আবশ্যক , যে ক্ষেত্রে নয় --- অন্তত এখনো।
গ্রেগর টমাস

2
সেমিকোলনগুলির সাথে উদাহরণটি Incorrect syntax near 'THROW'.এসকিউএল সার্ভার ২০০৮ (10.0.6241.0) এ ফলাফল দেয় যা আমার কাজের সাথে কাজ করার সংস্করণ। এটি ২০১২-র মতো প্রদর্শিত হয়েছে। আমি অবজ্ঞার কারণে অর্ধপরিচয়গুলি ব্যবহার শুরু করার ব্যাপারে নিশ্চিত হয়েছি। আমি আশা করি না এটি বেশিরভাগ সময় ২০০৮ এ সমস্যা হবে।
পাইলট_51

1
আপনার উত্তর এখন পর্যন্ত সেরা! এটি অনেক বেশি উপায়ে প্রাপ্য।
স্টুয়ার্ট

22

আমি যদি এটি সঠিকভাবে পড়ে থাকি তবে টিএসকিউএল স্টেটমেন্টগুলি শেষ করতে সেমিকোলন ব্যবহার করা প্রয়োজন হবে। http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.120%29.aspx

সম্পাদনা: আমি এসএসএমএস ২০০৮ আর ২ এর জন্য একটি প্লাগ-ইন পেয়েছি যা আপনার স্ক্রিপ্টটি ফর্ম্যাট করে এবং সেমিকোলনগুলি যুক্ত করবে। আমি মনে করি এটি এখনও বিটাতে রয়েছে ...

http://www.tsqltidy.com/tsqltidySSMSAddin.aspx

সম্পাদনা: আমি এপেক্সএসকিউএল নামে একটি আরও ভাল ফ্রি সরঞ্জাম / প্লাগইন পেয়েছি ... http://www.apexsql.com/


11

ব্যক্তিগত মতামত: যেখানে প্রয়োজন সেখানে এগুলি ব্যবহার করুন। (প্রয়োজনীয় তালিকার জন্য উপরে টিটিএক্সআইয়ের উত্তর দেখুন।)

যেহেতু সংকলকটি তাদের প্রয়োজন হয় না, আপনি সেগুলি পুরোপুরি রেখে দিতে পারেন তবে কেন? সংকলক আপনাকে কোনটি ভুলে গেছে তা আপনাকে জানায় না, তাই আপনি বেমানান ব্যবহারের সাথে শেষ করবেন।

[এই মতামত এসকিউএল সার্ভারের সাথে নির্দিষ্ট। অন্যান্য ডাটাবেসের আরও কঠোর প্রয়োজনীয়তা থাকতে পারে। আপনি যদি একাধিক ডাটাবেসে চালনার জন্য এসকিউএল লিখছেন তবে আপনার প্রয়োজনীয়তা আলাদা হতে পারে]]

tpdi উপরে বর্ণিত হয়েছে, "একটি স্ক্রিপ্টে, আপনি একাধিক বিবৃতি প্রেরণ করছেন, আপনার এটির দরকার আছে।" এটি আসলে সঠিক নয়। আপনার তাদের দরকার নেই।

PRINT 'Semicolons are optional'
PRINT 'Semicolons are optional'
PRINT 'Semicolons are optional';
PRINT 'Semicolons are optional';

আউটপুট:

Semicolons are optional
Semicolons are optional
Semicolons are optional
Semicolons are optional

1
আপনি এই আলোচনা সম্পর্কে কি মনে করেন? sqlservercentral.com/ Forums/Topic636549-8-1.aspx (আপনি একাউন্ট না থাকলে বাগম্যানট@bugmenot.com: বাগম্যানট ব্যবহার করতে পারেন)
আনোয়ার পিন্টো

2
আমি প্রশংসা করি যে আপনি স্পষ্টভাবে বলেছেন এটি কেবল আপনার মতামত, তবে আমি মনে করি না এটি একটি ভাল উত্তর দেয় কারণ এটি মাইক্রোসফ্ট ডকুমেন্টেশন এবং এএনএসআই উভয় মানের সাথে সাংঘর্ষিক। আমি এই মতামত একটি মন্তব্যে আরও ভাল হবে মনে করি। (আপনাকে ধরিয়ে দেওয়ার চেষ্টা করছি না, আপনি আধা-কোলনের ব্যবহার সম্পর্কে আপনার মতামতের পুরোপুরি অধিকারী!)
izzy

4

টি-এসকিউএল সম্পর্কে আমার এখনও অনেক কিছু শিখতে হবে, তবে লেনদেনের জন্য কিছু কোড তৈরি করার ক্ষেত্রে (এবং স্ট্যাকওভারফ্লো এবং অন্যান্য সাইটগুলির উদাহরণগুলির ভিত্তিতে কোড ভিত্তিক কোড) আমি একটি কেস পেয়েছি যেখানে এটি মনে হয় যে সেমিকোলন প্রয়োজন এবং এটি অনুপস্থিত থাকলে, বিবৃতিটি মোটেও কার্যকর হচ্ছে বলে মনে হয় না এবং কোনও ত্রুটি উত্থাপিত হয় না। এটি উপরের উত্তরের কোনওটিতে আচ্ছাদিত বলে মনে হচ্ছে না। (এটি এমএস এসকিউএল সার্ভার 2012 ব্যবহার করছিল))

একবার আমি যেমনভাবে নিজের মতো লেনদেন করেছি, তখন আমি তার চারপাশে একটি ট্রাই-ক্যাচ রাখার সিদ্ধান্ত নিয়েছি যাতে যদি কোনও ত্রুটি থাকে তবে এটি আবার ঘূর্ণায়মান। কেবল এটি করার পরে, লেনদেনটি প্রতিশ্রুতিবদ্ধ হয়নি (এসএমএসএস একটি অনুরুপিত লেনদেন রয়েছে তা সম্পর্কে আপনাকে সতর্ক করে একটি দুর্দান্ত বার্তা দিয়ে উইন্ডোটি বন্ধ করার চেষ্টা করার সময় এটি নিশ্চিত করে।

আমার স্নাতকের

COMMIT TRANSACTION 

কোনও BEGIN TRY / End এর বাইরে ট্রায়ার ব্লক লেনদেন করার জন্য ভাল কাজ করেছে, তবে ব্লকের ভিতরে এটি হতে হয়েছিল

COMMIT TRANSACTION;

নোট করুন যে কোনও ত্রুটি বা সতর্কতা সরবরাহ করা হয়নি এবং কোয়েরি ট্যাবটি বন্ধ করার চেষ্টা না করা অবধি লেনদেনটি এখনও অনিয়ন্ত্রিত রয়েছে এমন কোনও ইঙ্গিত নেই।

ভাগ্যক্রমে এটি এত বিশাল সমস্যা সৃষ্টি করে যে এটি তাত্ক্ষণিকভাবে স্পষ্ট হয় যে কোনও সমস্যা আছে। দুর্ভাগ্যক্রমে যেহেতু কোনও ত্রুটি (সিনট্যাক্স বা অন্যথায়) রিপোর্ট করা হয়নি ততক্ষণে সমস্যাটি কী তা তাত্ক্ষণিকভাবে স্পষ্ট হয় নি।

বিপরীতে, রোলব্যাক ট্রান্সাকশনটি সেমিকোলনের সাথে বা ছাড়াই বিগইন ক্যাচ ব্লকে সমানভাবে কাজ করে বলে মনে হচ্ছে।

এটিতে কিছু যুক্তি থাকতে পারে তবে এটি নির্বিচারে এবং অ্যালিস-ইন-ওয়ান্ডারল্যান্ড-ইশ অনুভব করে।


এর একটি সম্ভাব্য কারণ হ'ল COMMIT TRANSACTIONanচ্ছিক লেনদেন / সেভ পয়েন্টের নাম গ্রহণ করে (যা এটি উপেক্ষা করবে)। একটি সমাপ্তি সেমিকোলন ব্যতীত COMMIT TRANSACTIONপরবর্তী চিহ্নটি খেতে পারেন যদি এটি সনাক্তকারী হিসাবে পার্স করে, যা কোডের শব্দার্থকে আমূল পরিবর্তন করতে পারে। যদি এটির পরে কোনও ত্রুটির ফলস্বরূপ ঘটে CATCHতবে COMMITকখনও কখনও মৃত্যুদণ্ড কার্যকর না করে ট্রিগারটি ট্রিগার করতে পারে । বিপরীতভাবে, ROLLBACK TRANSACTIONএছাড়াও এই যেমন একটি alচ্ছিক শনাক্তকারী গ্রহণ করার সময়, পার্সিংয়ের ক্ষেত্রে একটি ত্রুটির ফলে লেনদেনটি যেভাবেই আবার ফিরে যেতে পারে সম্ভবত।
জেরোইন মোস্টার্ট

3

দেখা যাচ্ছে যে সেমিকোলন কার্সার অপারেশন সাথে ব্যবহার করা উচিত: OPEN, FETCH, CLOSEএবং DEALLOCATE। আমি এই সঙ্গে কয়েক ঘন্টা নষ্ট। বিএল-এর দিকে আমার গভীর নজর ছিল এবং লক্ষ্য করা গেল যে [;] এই কার্সার বিবৃতিগুলির সিনট্যাক্সে দেখানো হয়নি !!

সুতরাং আমি ছিল:

OPEN mycursor;

এবং এটি আমাকে ত্রুটি দিয়েছে 16916।

কিন্তু:

OPEN mycursor

কাজ করছে.


2
আমি এটি সঠিক মনে করি না। বিএল স্টেটমেন্ট সিনট্যাক্সের উপর সেমিকোলন উল্লেখ করার ক্ষেত্রে খুব একটা সামঞ্জস্যপূর্ণ নয়, উদাহরণস্বরূপ SELECT এ দেখুন। এছাড়াও আমি কিছু কার্সার ওপেন প্রত্যক্ষ করেছি; ফাইন, ক্লোজ এবং ডিলোকেটের জন্য একই কাজ ...
ভ্যালেন্টিনো ভ্রানকেন

এটি আমার কাছে পার্সার সহ একটি বাগ প্রস্তাব দেয়। এসকিউএল সার্ভারের কোন সংস্করণ আপনি ব্যবহার করছেন / করছেন?
স্টিয়ার্ট

2

মতে লেনদেন এসকিউএল সিনট্যাক্স কনভেনশন (লেনদেন এসকিউএল) (দুটিই MSDN)

লেনদেন-এসকিউএল স্টেটমেন্ট টার্মিনেটর। যদিও এসকিউএল সার্ভারের এই সংস্করণে বেশিরভাগ বিবৃতিগুলির জন্য সেমিকোলন প্রয়োজন হয় না তবে এটি ভবিষ্যতের সংস্করণে প্রয়োজন হবে।

(@ জিরিলাউরির মন্তব্যও দেখুন)


0

কোনও ব্যাচে যে কোনও অক্ষম বা সক্ষম ট্রিগার বিবৃতিতে অন্যান্য বিবৃতি রয়েছে সেগুলি ব্যবহার করার সময়, বিবৃতিটি সেমিকোলনের সাথে শেষ হওয়া উচিত। অন্যথায়, আপনি একটি সিনট্যাক্স ত্রুটি পাবেন। আমি এইটি দিয়ে আমার চুল ছিঁড়ে ফেলেছি ... এবং পরে, আমি একই জিনিসটি নিয়ে এই এমএস কানেক্ট আইটেমটিতে হোঁচট খেয়েছি। এটি ঠিক না হওয়ায় এটি বন্ধ রয়েছে।

দেখতে এখানে


0

দ্রষ্টব্য: এটি লিখিত হিসাবে প্রশ্নের উত্তর দেয়, তবে উল্লিখিত সমস্যাটি নয়। এটি এখানে যুক্ত করা হচ্ছে, যেহেতু লোকেরা এটি অনুসন্ধান করবে

WITHপুনরাবৃত্ত সিটিই বিবৃতিতে এর আগেও সেমিকোলন ব্যবহৃত হয় :

;WITH Numbers AS
(
    SELECT n = 1
    UNION ALL
    SELECT n + 1
    FROM Numbers
    WHERE n+1 <= 10
)
SELECT n
FROM Numbers

এই কোয়েরিটি পূর্ণসংখ্যার [1..10] সমন্বিত নাম্বার নামক একটি সিটিই তৈরি করবে। এটি কেবলমাত্র 1 টি মান সহ একটি টেবিল তৈরি করে এবং পরে 10 এ পৌঁছানো পর্যন্ত পুনরাবৃত্তি করে is


8
প্রযুক্তিগতভাবে 'এর সাথে আগে' নয়, তবে যা কিছু আসে তার পরে। যদি ব্যাচের প্রথম বিবৃতি থাকে তবে কোনও সেমিকোলন প্রয়োজন হয় না।
টর হগেন

তা না হয় এছাড়াও সঙ্গে আগে ব্যবহার করা হয়েছে। এটি কেবলমাত্র সেমিকোলন যা পূর্ববর্তী বিবৃতিটি সমাপ্ত করে। দেখে মনে হচ্ছে কিছু লোক সেমিকোলনটি এখানে থাকার সিদ্ধান্ত নিয়েছে কারণ এটি এমন একটি দৃশ্য যা বলেছিল যে সেমিকোলন প্রয়োজন। এই লোকেরা কেন সিদ্ধান্ত নিয়েছে এটি সর্বদা সেমিকোলনগুলির সাথে বিবৃতি বন্ধ করার চেয়ে সেরা , আমার কোনও ধারণা নেই।
স্টুয়ার্ট

0

আপনি যদি এসকিউএল সার্ভারে এলোমেলোভাবে কমান্ড টাইমআউট ত্রুটি পেতে চান তবে আপনার কমান্ডটেক্সট স্ট্রিংয়ের শেষে আধা-কোলনটি ছেড়ে যান।

আমি জানি না এটি কোথাও নথিভুক্ত হয়েছে বা এটি কোনও বাগ থাকলেও তা ঘটে থাকে এবং আমি তিক্ত অভিজ্ঞতা থেকে এটি শিখেছি।

এসকিউএল সার্ভার 2008 ব্যবহার করে আমার যাচাইযোগ্য এবং পুনরুত্পাদনযোগ্য উদাহরণ রয়েছে।

ওরফে -> অনুশীলনে, সর্বদা টার্মিনেটর অন্তর্ভুক্ত করুন এমনকি যদি আপনি কেবল ডাটাবেসে একটি বিবৃতি প্রেরণ করেন।


যদি আপনি কোনও কিছুর উপর ভিত্তি করে যদি কোনও সেমিকোলন না থাকায় বা শেষের দিকে পেয়ে থাকেন তবে এটি অবশ্যই প্রায়শই বিভিন্ন বাস্তবায়ন পরিকল্পনা থাকার কারণে ঘটেছে, যেমন সঠিক কোয়েরি পাঠ্যের সাথে মিল রেখে ক্যাশে করা হয়েছে , অন্যথায় শব্দার্থগতভাবে অপ্রাসঙ্গিক সহ হোয়াইটস্পেস, মন্তব্য এবং একটি সমাপ্তি সেমিকোলনের মতো জিনিস। সেমিকোলন নিজেই যেকোন সময়সীমার সমস্যা সৃষ্টি করার জন্য সম্পূর্ণ নির্দোষ হবে।
জেরোইন মোস্টার্ট

-2

সেমিকোলনগুলি সর্বদা যৌগিক SELECT বিবৃতিতে কাজ করে না।

একটি তুচ্ছ যৌগিক SELECT বিবৃতি এই দুটি পৃথক সংস্করণ তুলনা করুন।

কোড

DECLARE @Test varchar(35); 
SELECT @Test=
    (SELECT 
        (SELECT 
            (SELECT 'Semicolons do not always work fine.';););); 
SELECT @Test Test;

আয়

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ';'.

যাইহোক, কোড

DECLARE @Test varchar(35)
SELECT @Test=
    (SELECT 
        (SELECT 
            (SELECT 'Semicolons do not always work fine.'))) 
SELECT @Test Test

আয়

Test
-----------------------------------
Semicolons do not always work fine.

(1 row(s) affected)

11
[এক বছর পরে]: বাহ আমি অতি উত্তেজিত এই উত্তর সম্পর্কে এখনও কেউ মন্তব্য করেনি! অবশ্যই এটি কাজ করবে না, সেমিকোলনগুলি স্টেটমেন্ট বিভাজক, সুতরাং সেমিকোলনগুলির সাথে আপনার কোডটি হ'ল: 1- নির্বাচন করুন @ পরীক্ষা = (নির্বাচন করুন (নির্বাচন করুন 'সেলেক্টনগুলি সর্বদা সূক্ষ্মভাবে কাজ করে না' '; - - এটি সঠিক নয়) বিবৃতি 2-); - এটি কোনও 3-) নয়; - যেটি 4-);
সেমিমিকোলনটি

1
আপনি শুধুমাত্র বিবৃতি শেষ করতে সেমিকোলন ব্যবহার করেন । একটি subquery একটি বিবৃতি নয়। বিবৃতিগুলি এমন জিনিস যা ক্রমানুসারে কার্যকর করা হয়। আপনার উদাহরণে, তিনটি বক্তব্য রয়েছে: ১. পরীক্ষার বার্তা (৩৫) ঘোষণা করুন ২. নির্বাচন করুন @ পরীক্ষা = (নির্বাচন করুন (নির্বাচন করুন 'সেমিকোলন সবসময় ভাল কাজ করে না।'))) ৩. নির্বাচন করুন পরীক্ষার টেস্ট
স্টুয়ার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.