سؤال

أنا أحاول 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.");

2 طرق للعمل حول هذا:


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


لأي Charactor ، لست متأكدًا من: في SQL Server ، يمكنك الحصول على أي unicode من char select unicode(':')

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

أيضًا شيء آخر يجب توخي الحذر هو ما إذا كان يتم تخزينه حقًا كـ ASCII كلاسيكي (ASCII 27) أو Unicode 2019 (الذي يبدو متشابهاً ، ولكن ليس هو نفسه).

هذه ليست مشكلة كبيرة على الإدراج ، ولكنها قد تعني العالم على الاختيار والتحديثات.
إذا كانت قيمة Unicode ، فإن الهروب من "في A" ، على سبيل المثال ، سيعود بند (على سبيل المثال ، "بلاه =" العمال ") مثل القيمة التي تبحث عنها ليس موجودًا إذا كانت" في "شركات العامل" هي في الواقع هي قيمة يونيكود.

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

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

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

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

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

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

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

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

فقط أدخل "قبل أي شيء ليتم إدراجه. سيكون مثل شخصية الهروب في SQLServer

مثال: عندما يكون لديك حقل ، أنا بخير. يمكنك القيام بذلك: تحديث my_table set row = "أنا بخير. '؛

string value = "Abhishek's";

value = Replace(value,"'","''");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top