it-swarm.asia

كيف يمكنني الهروب من اقتباس واحد في SQL Server؟

أحاول insert بعض بيانات النص في جدول في SQL Server 9.

يتضمن النص اقتباس واحد (').

كيف يمكنني الهروب من ذلك؟

حاولت استخدام علامتي اقتباس مفردتين ، لكنه ألقى بعض الأخطاء.

على سبيل المثال. insert into my_table values('hi, my name''s tim.');

792
tim_wonil

يتم الهروب من علامات الاقتباس المفردة عن طريق مضاعفة هذه الأسعار ، تمامًا كما أظهرت لنا في مثالك. يوضح 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.
1168
Cᴏʀʏ

إذا كان الهروب من عرض الأسعار الفردي الخاص بك مع عرض أسعار واحد آخر لا يعمل من أجلك (كما هو الحال مع أحد استفسارات 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
64
Brad Waite

كيف حول:

insert into my_table values('hi, my name'+char(39)+'s tim.')
37
PaulMcG

يجب أن يكون مضاعفة الاقتباس ناجحًا ، لذلك من الغريب أنه لم ينجح معك ؛ ومع ذلك ، يستخدم بديل علامات اقتباس مزدوجة بدلاً من الأحرف المفردة حول السلسلة. أي.،

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

16
Alex Martelli

من الأمور الأخرى التي يجب توخي الحذر بشأنها ما إذا كان يتم تخزينها حقًا باعتبارها كلاسيكية ASCII '(ASCII 27) أو Unicode 2019 (والتي تبدو متشابهة ، ولكن ليست متشابهة).

هذه ليست مشكلة كبيرة في عمليات الإدراج ، ولكن يمكن أن تعني العالم على التحديدات والتحديثات.
إذا كانت قيمة Unicode ، فستهرب من عبارة "في جملة WHERE (على سبيل المثال ، حيث blah = 'Workers''s Comp') ستظهر مثل القيمة التي تبحث عنها غير موجودة إذا كانت" in "العامل شركات "هو في الواقع قيمة يونيكود.

إذا كان تطبيق العميل الخاص بك يدعم المفتاح الحر ، وكذلك نسخ المدخلات المستندة إلى ولصقها ، فقد يكون Unicode في بعض الصفوف ، و ASCII في الآخرين!

هناك طريقة بسيطة لتأكيد ذلك من خلال إجراء نوع من الاستعلام المفتوح الذي سيعيد القيمة التي تبحث عنها ، ثم انسخها والصقها في برنامج notepad ++ أو أي محرر دعم يونيكود آخر.

يجب أن يكون المظهر المختلف بين قيمة أسكي والقيمة يونيكود واضحًا للعينين ، ولكن إذا كنت تميل نحو الشرج ، فسوف تظهر في شكل 27 (أسكي) أو 92 (يونيكود) في محرر سداسي عشرية.

6
Daniel Schmidt

طريقتان للتغلب على هذا:


بالنسبة لـ ' ، يمكنك ببساطة مضاعفة الرقم في السلسلة ، على سبيل المثال select 'I''m happpy' -- will get: I'm happy


بالنسبة لأي سمة لا تكون متأكدًا منها: في خادم sql ، يمكنك الحصول على يونيكود لأي تشار بواسطة select unicode(':')

لذلك هذه الحالة يمكنك أيضا select 'I'+nchar(39)+'m happpy'

4
Xin

هذا يجب أن تعمل

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

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

يجب أن يعمل هذا: استخدم شرطة مائلة للخلف ووضع علامة اقتباس مزدوجة

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