أحاول insert
بعض بيانات النص في جدول في SQL Server
9.
يتضمن النص اقتباس واحد (').
كيف يمكنني الهروب من ذلك؟
حاولت استخدام علامتي اقتباس مفردتين ، لكنه ألقى بعض الأخطاء.
على سبيل المثال. insert into my_table values('hi, my name''s tim.');
يتم الهروب من علامات الاقتباس المفردة عن طريق مضاعفة هذه الأسعار ، تمامًا كما أظهرت لنا في مثالك. يوضح SQL التالي هذه الوظيفة. لقد اختبرت ذلك على SQL Server 2008:
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.
إذا كان الهروب من عرض الأسعار الفردي الخاص بك مع عرض أسعار واحد آخر لا يعمل من أجلك (كما هو الحال مع أحد استفسارات 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
كيف حول:
insert into my_table values('hi, my name'+char(39)+'s tim.')
يجب أن يكون مضاعفة الاقتباس ناجحًا ، لذلك من الغريب أنه لم ينجح معك ؛ ومع ذلك ، يستخدم بديل علامات اقتباس مزدوجة بدلاً من الأحرف المفردة حول السلسلة. أي.،
insert into my_table values("hi, my name's tim."
)؛
من الأمور الأخرى التي يجب توخي الحذر بشأنها ما إذا كان يتم تخزينها حقًا باعتبارها كلاسيكية ASCII '(ASCII 27) أو Unicode 2019 (والتي تبدو متشابهة ، ولكن ليست متشابهة).
هذه ليست مشكلة كبيرة في عمليات الإدراج ، ولكن يمكن أن تعني العالم على التحديدات والتحديثات.
إذا كانت قيمة Unicode ، فستهرب من عبارة "في جملة WHERE (على سبيل المثال ، حيث blah = 'Workers''s Comp') ستظهر مثل القيمة التي تبحث عنها غير موجودة إذا كانت" in "العامل شركات "هو في الواقع قيمة يونيكود.
إذا كان تطبيق العميل الخاص بك يدعم المفتاح الحر ، وكذلك نسخ المدخلات المستندة إلى ولصقها ، فقد يكون Unicode في بعض الصفوف ، و ASCII في الآخرين!
هناك طريقة بسيطة لتأكيد ذلك من خلال إجراء نوع من الاستعلام المفتوح الذي سيعيد القيمة التي تبحث عنها ، ثم انسخها والصقها في برنامج notepad ++ أو أي محرر دعم يونيكود آخر.
يجب أن يكون المظهر المختلف بين قيمة أسكي والقيمة يونيكود واضحًا للعينين ، ولكن إذا كنت تميل نحو الشرج ، فسوف تظهر في شكل 27 (أسكي) أو 92 (يونيكود) في محرر سداسي عشرية.
طريقتان للتغلب على هذا:
بالنسبة لـ '
، يمكنك ببساطة مضاعفة الرقم في السلسلة ، على سبيل المثال select 'I''m happpy' -- will get: I'm happy
بالنسبة لأي سمة لا تكون متأكدًا منها: في خادم sql ، يمكنك الحصول على يونيكود لأي تشار بواسطة select unicode(':')
لذلك هذه الحالة يمكنك أيضا select 'I'+nchar(39)+'m happpy'
هذا يجب أن تعمل
DECLARE @singleQuote CHAR
SET @singleQuote = CHAR(39)
insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
يجب أن يعمل هذا: استخدم شرطة مائلة للخلف ووضع علامة اقتباس مزدوجة
"UPDATE my_table SET row =\"hi, my name's tim.\";