2009-04-22 37 views

Trả lời

7
INSERT INTO Table1 (Column1) VALUES ('John''s') 

Hoặc bạn có thể sử dụng một thủ tục lưu trữ và truyền tham số như -

usp_Proc1 @Column1 = 'John''s' 

Nếu bạn đang sử dụng truy vấn INSERT và không phải là thủ tục lưu trữ, bạn sẽ phải thoát khỏi báo giá với hai dấu ngoặc kép, nếu không thì sẽ không sao nếu bạn không thực hiện.

+0

cách có thể có được khi giá trị đến từ biến số – solairaja

+1

@solairaja - @somevar = 'Test''s' – Kirtan

23

thoát quote duy nhất với thêm một single như Kirtan chỉ ra
Và nếu bạn đang cố gắng để thực hiện một sql động (mà không phải là một ý tưởng tốt ở nơi đầu tiên) thông qua sp_executesql sau đó mã dưới đây sẽ làm việc cho bạn

sp_executesql N'INSERT INTO SomeTable (SomeColumn) VALUES (''John''''s'')' 
19

Câu trả lời thực sự phụ thuộc vào cách bạn đang thực hiện INSERT.

Nếu bạn đang xác định một SQL đen thì bạn cần phải sử dụng cách tiếp cận kép đánh dấu:

-- Direct insert 
INSERT INTO Table1 (Column1) VALUES ('John''s') 

-- Using a parameter, with a direct insert 
DECLARE @Value varchar(50) 
SET @Value = 'John''s' 
INSERT INTO Table1 (Column1) VALUES (@Value) 

-- Using a parameter, with dynamic SQL 
DECLARE @Value varchar(50) 
SET @Value = 'John''s' 
EXEC sp_executesql 'INSERT INTO Table1 (Column1) VALUES (@p1)', '@p1 varchar(50)', @Value 

Nếu bạn đang làm việc INSERT từ mã, các thông số sử dụng:

// Sample ADO.NET 
using (SqlConnection conn = new SqlConnection(connectionString)) { 
    conn.Open(); 
    using (SqlCommand command = conn.CreateCommand()) { 
     command.CommandText = "INSERT INTO Table1 (Column1) VALUES (@Value)"; 

     command.Parameters.AddWithValue("@Value", "John's"); 

     command.ExecuteNonQuery(); 
    } 
} 

Nếu bạn dữ liệu chứa người dùng nhập, trực tiếp hoặc gián tiếp, CÁCH THAM SỐ SỬ DỤNG. Các tham số bảo vệ chống lại các cuộc tấn công SQL Injection. Không bao giờ xây dựng SQL động với đầu vào của người dùng.

+0

cảm ơn bạn ... nhưng mã này sẽ không hoạt động cho querry cập nhật động –

+4

Bạn có thể cung cấp thêm chi tiết về truy vấn của mình không? Các tham số sẽ hoạt động trong hầu hết các truy vấn. Tôi tò mò tại sao họ sẽ không làm việc trong trường hợp của bạn. – Brannon

16

này đã làm việc cho tôi:

INSERT INTO [TABLE] 
    VALUES ('text','''test.com''', 1) 

Về cơ bản, bạn nên tận dụng dấu nháy đơn bạn muốn chèn và thay thế bằng hai. Vì vậy, nếu bạn muốn chèn một chuỗi văn bản ('văn bản') và thêm dấu nháy đơn xung quanh nó, nó sẽ là ('' 'văn bản' ''). Hi vọng điêu nay co ich.

1

Câu trả lời này hoạt động trong SQL Server 2005, 2008, 2012.

Đôi khi giá trị có MANY trích dẫn đơn. Thay vì thêm một trích dẫn duy nhất bên cạnh mỗi trích dẫn đơn như được mô tả ở trên với 'John''s'. Và có các ví dụ sử dụng hàm REPLACE để xử lý nhiều dấu nháy đơn trong một giá trị.

Hãy thử cách sau. Đây là một câu lệnh cập nhật nhưng bạn cũng có thể sử dụng nó trong câu lệnh INSERT.

SET QUOTED_IDENTIFIER OFF 

DECLARE @s VARCHAR(1000) 

SET @s = "SiteId:'1'; Rvc:'6'; Chk:'1832'; TrEmp:'150'; WsId:'81'; TtlDue:'-9.40'; TtlDsc:'0'; TtlSvc:'0'; TtlTax:'-0.88'; TtlPay:'0'; TipAmt:'0.00'; SvcSeq:'09'; ReTx:'N'; TraceId:'160110124347N091832';" 


UPDATE TransactionPaymentPrompt 
set PromptData = @s 

from TransactionPaymentPrompt tpp with (nolock) 
where tpp.TransactionID = '106627343' 
0

Bạn đã hỏi cách thoát khỏi Apostrophe character (') trong SQL Server. Tất cả các câu trả lời trên làm một công việc tuyệt vời để giải thích điều đó.

Tuy nhiên, tùy thuộc vào tình huống, Right single quotation mark character (’) có thể phù hợp.

(Không ký tự thoát cần thiết)

-- Direct insert 
INSERT INTO Table1 (Column1) VALUES ('John’s') 

• Apostrophe (U + 0027)

Ascii Apostrophe on Wikipedia

• Dấu ngoặc kép đơn phải (U + 2019)

Unicode Right single quotation on Wikipedia

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