sql-server-2008
  • sql-update
  • 2012-01-19 4295 views 10 likes 
    10

    Tôi có truy vấn T-SQL mẫu này và thử điều này trên SQL-Server-2008.Làm thế nào để xử lý-thoát cả hai dấu nháy đơn và kép trong câu lệnh SQL-Update

    DECLARE nvarchar(1000) @wstring = "I asked my son's teacher, "How is my son doing now?"" 
    
    UPDATE tablename SET columnname = ' " & @wstring & " ' where ... blah ... blah 
    

    Tôi biết rằng truy vấn trên sẽ gây ra lỗi.

    Vì vậy, Làm cách nào để xử lý-thoát cả dấu nháy đơn và dấu ngoặc kép trong câu lệnh SQL-Update.

    Vui lòng không đề xuất thêm thủ công 'dấu gạch chéo \' hoặc trích dẫn một lần trước mỗi trích dẫn và giống nhau cho trích dẫn kép.

    Điều này sẽ không thực tế vì ví dụ trên chỉ là một ví dụ đơn giản và giá trị ứng dụng thực tế lớn hơn 1000 ký tự, sẽ nhận được từ một số nguồn hệ thống khác.

    +0

    Trường hợp bạn có tệp văn bản cụ thể bạn muốn chèn thủ công trong ứng dụng khách SQL?Hay bạn đang viết một chương trình để chèn tập tin, và bạn chỉ thử nghiệm nó trong máy khách để tìm ra cách viết chương trình? –

    +0

    bạn đang sử dụng C#? – Pankaj

    +0

    Thx Russell ... vì cố gắng hiểu tình hình. Kịch bản giống như - có nhiều hệ thống gửi cho chúng tôi chuỗi ký tự 1000+ này. Bây giờ chuỗi này được truyền vào như một tham số sql và truy vấn cập nhật sql của tôi cần chèn chuỗi này vào một cột cụ thể. – MukeshAnAlsoRan

    Trả lời

    15

    Bạn có thể thoát khỏi dấu ngoặc kép với một dấu chéo ngược:

    "I asked my son's teacher, \"How is my son doing now?\"" 
    
    +1

    Tôi đã nói rằng việc thêm 'dấu gạch chéo' hoặc trích dẫn một lần theo cách thủ công trước mỗi trích dẫn và giống nhau cho báo giá kép là không đúng và bị loại trừ, vì ví dụ trên chỉ là mẫu và giá trị ứng dụng thực tế lớn hơn 1000 ký tự. – MukeshAnAlsoRan

    4

    Sử dụng hai dấu ngoặc kép duy nhất để thoát khỏi chúng trong câu lệnh SQL. Các dấu ngoặc kép không phải là một vấn đề:

    SELECT 'How is my son''s school helping him learn? "Not as good as Stack Overflow would!"' 
    

    In:

    How is my son's school helping him learn? "Not as good as Stack Overflow would!"

    +0

    Cảm ơn Mike. NHƯNG Tôi đã nói rằng việc thêm một dấu gạch chéo theo cách thủ công hoặc trích dẫn một lần trước mỗi trích dẫn và giống nhau cho báo giá kép là impractcal và loại trừ, vì ví dụ trên chỉ là mẫu và giá trị ứng dụng thực tế lớn hơn 1000 ký tự. – MukeshAnAlsoRan

    +2

    Nếu thoát khỏi các ký tự là không thực tế, thì tôi tưởng tượng rằng nó sẽ khá khó khăn để thoát khỏi chúng. Ngoài ra, bạn có thể thử xác định giá trị thay thế cho ", và thay thế hàng loạt chúng để bạn có thể thực hiện truy vấn của mình. Tất nhiên, bạn sẽ phải thay thế chúng lại thành giá trị chính xác khi bạn cần chúng được hiển thị. – mclark1129

    +0

    Ya Mike .. Tôi đã nghĩ điều gì đó ở mức độ đó ... về một lô thay thế và giống nhau NHƯNG Tôi cảm thấy rằng sẽ là quá mức cần thiết cho kịch bản này và SQL phải có một số cách thanh lịch vốn có để xử lý điều này, bởi vì vấn đề này sẽ đã tồn tại 10 năm trước đó. – MukeshAnAlsoRan

    0

    Trong C# và VB đối tượng SqlCommand thực hiện các phương pháp Parameter.AddWithValue mà xử lý tình huống này

    4

    Tuỳ về ngôn ngữ bạn đang lập trình, bạn có thể sử dụng hàm để thay thế dấu ngoặc kép bằng hai dấu ngoặc kép.

    Ví dụ trong PHP đó sẽ là:

    str_replace('"', '""', $string); 
    

    Nếu bạn đang cố gắng để làm điều đó sử dụng SQL chỉ, có lẽ REPLACE() là những gì bạn đang tìm kiếm.

    Vì vậy, câu hỏi của bạn sẽ giống như thế này:

    "UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah " 
    
    1

    Sử dụng "REPLACE" để loại bỏ ký tự đặc biệt.

    REPLACE(ColumnName ,' " ','') 
    

    Ex: -

    --Query ---

    DECLARE @STRING AS VARCHAR(100) 
    SET @STRING ='VI''RA""NJA "' 
    
    SELECT @STRING 
    SELECT REPLACE(REPLACE(@STRING,'''',''),'"','') AS MY_NAME 
    

    --Result ---

    VI'RA "" NJA"

    0

    Khi SET QUOTED_IDENTIFIER bị TẮT, các chuỗi ký tự trong các biểu thức có thể được phân cách bằng dấu ngoặc kép đơn hoặc kép.

    Nếu chuỗi ký tự được phân cách bằng dấu ngoặc kép, chuỗi có thể chứa dấu ngoặc đơn được nhúng, chẳng hạn như dấu nháy đơn.

    Các vấn đề liên quan