এসকিউএল সার্ভারে আমি কীভাবে একটি একক উদ্ধৃতি এড়াতে পারি?


956

আমি চেষ্টা করছি insert একটি টেবিলের মধ্যে কিছু পাঠ্য ডেটাSQL Server 9।

পাঠ্যটিতে একটি একক উদ্ধৃতি (') অন্তর্ভুক্ত রয়েছে।

আমি কীভাবে পালাতে পারি?

আমি দুটি সিঙ্গল কোট ব্যবহার করার চেষ্টা করেছি, তবে এটি আমার কিছু ত্রুটি ছুঁড়েছে।

যেমন। insert into my_table values('hi, my name''s tim.');


30
"এটি আমাকে কিছু ত্রুটি ছুঁড়েছিল" - এই ত্রুটিগুলি কী ছিল?
llamaoo7

হ্যাঁ কারণ এমএসএসকিউএলে একক উদ্ধৃতি সন্নিবেশ করার সঠিক উপায় হ'ল তাদের দ্বিগুণ করা। আপনি আমাদের যে উদাহরণটি দেখান তা কাজ করা উচিত। আপনি কীভাবে এই এসকিউএল কোয়েরি করবেন, কোন ভাষা দিয়ে? নাকি এটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে রয়েছে?
ম্যাক্সিওয়েট

উত্তর:


1387

একক উদ্ধৃতিগুলি দ্বিগুণ করে পালিয়ে গেছে , যেমন আপনি আমাদের উদাহরণে দেখিয়েছেন। নিম্নলিখিত এসকিউএল এই কার্যকারিতা চিত্রিত করে। আমি এটি এসকিউএল সার্ভার ২০০৮ এ পরীক্ষা করেছি:

DECLARE @my_table TABLE (
    [value] VARCHAR(200)
)

INSERT INTO @my_table VALUES ('hi, my name''s tim.')

SELECT * FROM @my_table

ফলাফল

value
==================
hi, my name's tim.

16
আমি আমার সমস্যা সমাধানের জন্য ভুল জায়গায় তাকিয়ে ছিলাম। এটি সর্বোপরি কোনও চরিত্রের পালানোর সমস্যা ছিল না। আমার সমস্যাটি ছিল যে ডেটা দৈর্ঘ্য সীমা ছাড়িয়ে গেছে। আমাকে আশ্বস্ত করার জন্য ধন্যবাদ যে একক উদ্ধৃতি দু'বার ব্যবহার করা চরিত্রটি থেকে পালানোর সঠিক উপায়।
টিম_উনিল

সুতরাং, যদি আমার কাছে 10k শব্দযুক্ত একটি পাঠ্য থাকে তবে এটি প্রয়োজনীয় হবে আমি আমার সমস্ত পাঠ্য প্রতিস্থাপন করব?
ভিনিসিয়াস লিমা

3
@ ভিনিসিয়াসলিমা: সংক্ষিপ্ত উত্তরটি হ্যাঁ। আপনি অবশ্যই ডেটা সংরক্ষণ করার জন্য যে প্রযুক্তি ব্যবহার করছেন তা নির্ভর করে এটি অবশ্যই পরিবর্তিত হবে। আপনি যদি একটি ORM ব্যবহার করে থাকেন তবে এটি এটি আপনার জন্য করবে। আপনি যদি নিজের এসকিউএল আদেশগুলি ম্যানুয়ালি তৈরি করে থাকেন তবে আপনি ভাষার "প্রস্তুত বিবৃতি" কার্যকারিতাটি ব্যবহার করতে চাইবেন। আপনি যদি এটি ম্যানেজমেন্ট স্টুডিওতে করছেন তবে আপনাকে প্রতিস্থাপনটি করতে হবে।
Cᴏʀʏ

1
অর্থাত্ একটির জন্য দুটি একক উদ্ধৃতি। [''] => [']
উজ্জ্বল সিং

67

যদি অন্য একক উদ্ধৃতি দিয়ে আপনার একক উদ্ধৃতিটি রক্ষা করা আপনার পক্ষে কাজ করে না (যেমন এটি আমার সাম্প্রতিক REPLACE()প্রশ্নের কোনওটির জন্য নয় ) তবে আপনি SET QUOTED_IDENTIFIER OFFআপনার ক্যোয়ারির আগে, তারপরে SET QUOTED_IDENTIFIER ONআপনার প্রশ্নের পরে ব্যবহার করতে পারেন ।

উদাহরণ স্বরূপ

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again

2
সাধারণত আমি দ্বিগুণ পদ্ধতির ব্যবহার করি তবে আমি যেখানে ডায়নামিক এসকিউএল তৈরি করছিলাম যা তখন একাধিক সার্ভার এবং ডাটাবেস জুড়ে চলেছিল, এই সমাধানটি আমার পক্ষে কাজ করেছে যেখানে দ্বিগুণ কোনও নির্দিষ্ট ক্ষেত্রে হয়নি didn't এর জন্য ধন্যবাদ!
রিচার্ড মস

গণিত কলামগুলিতে ভিউ এবং সূচীগুলি উল্লেখ করার সময় সতর্কতা অবলম্বন করুন বা আপনি একটি ত্রুটি পেতে পারেন। stackoverflow.com/questions/9235527/...
datagod

@ রিচার্ডমস, +1 আপনার সাথে একই দৃশ্য। দ্বিগুণ হওয়া পদ্ধতির প্রাথমিক সমাধান। একাধিক সার্ভার জুড়ে ডায়নামিক এসকিউএল এর মতো জটিল প্রশ্নের জন্য, এটি কাজ করবে, দ্বিগুণ পদ্ধতির নাও হতে পারে
এডগার অ্যালান বায়রন


17

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

insert into my_table values("hi, my name's tim.");


4
যদি পাঠ্যে একক এবং ডাবল উভয় উক্তি থাকে? এছাড়াও, ডাবল উদ্ধৃতিগুলি কেবলমাত্র ফিল্ডের নামের জন্য সংরক্ষিত নয়?
Lajos Meszaros

11

এটি চারপাশে কাজ করার 2 টি উপায়:


জন্য 'আপনি কেবল স্ট্রিং এটা দ্বিগুণ করতে পারেন, যেমন select 'I''m happpy'- পাবেন:I'm happy


যে কোনও চরিত্রের জন্য আপনি নিশ্চিত নন: স্কয়ার সার্ভারে আপনি যে কোনও চরের ইউনিকোড পেতে পারেন select unicode(':') (আপনি নম্বরটি )

সুতরাং এই ক্ষেত্রে আপনি করতে পারেন select 'I'+nchar(39)+'m happpy'


6

এছাড়াও আরেকটি বিষয় সম্পর্কে সতর্কতা অবলম্বন করা হ'ল এটি সত্যই ক্লাসিক ASCII '(ASCII 27) বা ইউনিকোড 2019 (যা দেখতে একই রকম, তবে একই নয়) হিসাবে সংরক্ষণ করা হয়।

এটি সন্নিবেশগুলিতে কোনও বড় বিষয় নয়, তবে এটি নির্বাচিত এবং আপডেটের দ্বারা বিশ্বের বোঝাতে পারে।
যদি এটি ইউনিকোড মান হয় তবে 'ক্লিয়ার ক্লজ'-তে' (যেমন ব্লাহ = 'ওয়ার্কার্স'স কমপ্লেক্স') অনুসন্ধান করা সেই মানটির মতো ফিরে আসবে যেখানে "ওয়ার্কার্স কমপ" আসলে 'মানক' না হয় ইউনিকোড মান।

যদি আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটি ফ্রি-কী সমর্থন করে, পাশাপাশি অনুলিপি করে অনুলিপি এবং পেস্ট করে তবে এটি কিছু সারিতে ইউনিকোড হতে পারে এবং অন্যদের মধ্যে এএসসিআইআই হতে পারে!

এটির নিশ্চিত করার একটি সহজ উপায় হ'ল এক প্রকার উন্মুক্ত সমাপ্ত ক্যোয়ারী করা যা আপনার সন্ধান করা মানটি ফিরিয়ে আনবে এবং তারপরে নোটপ্যাড ++ বা অন্য কোনও ইউনিকোড সমর্থনকারী সম্পাদককে অনুলিপি করে আটকান।

আসকি মান এবং ইউনিকোডের মধ্যে পৃথক পৃথক চেহারা চোখের কাছে স্পষ্ট হওয়া উচিত, তবে আপনি যদি মলদ্বারের দিকে ঝুঁকেন তবে এটি একটি হেক্স সম্পাদক সম্পাদনায় 27 (আসকি) বা 92 (ইউনিকোড) হিসাবে প্রদর্শিত হবে।


4

আমাদের মধ্যে অনেকেই জানেন যে সিঙ্গেল কোটস থেকে বেরিয়ে আসার জনপ্রিয় পদ্ধতিটি নীচের মত সহজেই দ্বিগুণ করে।

PRINT 'It''s me, Arul.';

একক মূল্য পদ্ধতি দ্বিগুণ করা

আমরা একক উদ্ধৃতি থেকে পালানোর আরও কিছু বিকল্প উপায় সন্ধান করতে যাচ্ছি।

1. ইউনিকোড অক্ষর

39 টি একক উদ্ধৃতিটির ইউনিকোডে চরিত্র। সুতরাং আমরা নীচের মত এটি ব্যবহার করতে পারেন।

PRINT 'Hi,it'+CHAR(39)+'s Arul.';
PRINT 'Helo,it'+NCHAR(39)+'s Arul.';

ইউনিকোড অক্ষর

2.QUOTED_IDENTIFIER

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

SET QUOTED_IDENTIFIER OFF;
PRINT "It's Arul."
SET QUOTED_IDENTIFIER ON;

QUOTE_IDENTIFIER

উপসংহার

উপরোক্ত উল্লিখিত পদ্ধতিগুলি এজেউওআর এবং অন পার্সামিস উভয়ের জন্য প্রযোজ্য।


1

নিম্নলিখিত বাক্য বিন্যাস আপনাকে কেবলমাত্র একটি উদ্ধৃতি চিহ্ন থেকে রক্ষা করবে:

SELECT ''''

ফলাফল একক উদ্ধৃতি হবে। গতিশীল এসকিউএল তৈরি করতে খুব সহায়ক হতে পারে :)। এখানে চিত্র বর্ণনা লিখুন


0

এই কাজ করা উচিত

DECLARE @singleQuote CHAR 
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')

0

কিছু beোকানোর আগে কেবল একটি '.োকান। এটি স্কেল সার্ভারে একটি পালানোর চরিত্রের মতো হবে

উদাহরণ: আপনার যখন ক্ষেত্র থাকে তখন আমি ভাল আছি । আপনি এটি করতে পারেন: আপডেট করুন my_table SET সারি = 'আমি ভাল আছি' ;;


ওপি কি ঠিক তাই করেছে না এবং শীর্ষ ভোটের উত্তরটি ইতিমধ্যে বলেছে? সম্ভবত ত্রুটির অন্য কোনও উত্স অবশ্যই থাকতে পারে।
মাইকেল ম্যাকস্কিল

-2

এটি কাজ করা উচিত: একটি পিছনে স্ল্যাশ ব্যবহার করুন এবং একটি ডাবল উদ্ধৃতি রাখুন

"UPDATE my_table SET row =\"hi, my name's tim.\";

আপনি কি বোঝাতে চেয়েছেন? আপনি কি বলছেন যে PRINT \"hi, my name's tim.\";এসএসএমএসে কাজ করতে চলেছে? এটি মোটেই কাজ করে না এবং কেউ কখনও বলেনি যে এটি কাজ করে।
মোহাম্মদ মুসাভি

কখনও কাজ করবে না।
সন্তোষ জাদি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.