2011-02-28 35 views
40

我想使用帶有轉義字符的引號。我能怎麼做?SQL Server中的轉義字符

我已經在SQL Server接收到的錯誤

Unclosed quotation mark after the character string.

我寫的SQL查詢在一個varchar變量,但我收到的錯誤:

Unclosed quotation mark after the character string.

我想用引號作爲轉義字符。

在此先感謝

+1

你可以請**顯示**我們的查詢?? – 2011-02-28 08:48:18

+0

可能的重複[如何在SQL Server中單引號轉義?](https://stackoverflow.com/questions/1586560/how-do-i-escape-a-single-quote-in-sql-server) – 2018-01-22 16:34:48

回答

39

如果您將SQL連接到要執行的VARCHAR(即動態SQL),那麼我建議參數化SQL。這有助於防止SQL注入,這意味着您不必擔心像這樣(這是通過加倍引號來實現的)引號轉義。

例如而不是做

DECLARE @SQL NVARCHAR(1000) 
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA''' 
EXECUTE(@SQL) 

試試這個:

DECLARE @SQL NVARCHAR(1000) 
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1' 
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA' 
+1

爲什麼這是公認的答案?它不回答這個問題。 – 2018-02-05 13:11:18

+0

@PeterMoore任何一個OP都會使用我的答案的第一部分(按照下面的其他答案加倍引號),或者會使用我推薦的用於在字符串變量中構建SQL查詢的首選方法 - 以便使用參數化的SQL。無論哪種方式,這兩個都是問題的答案 – AdaTheDev 2018-02-05 14:48:47

9

逸出MSSQL報價由雙引號做,所以''""會產生一個逃脫分別與'"

57

您可以逃脫的報價是這樣的:

select 'it''s escaped' 

結果將是

it's escaped 
+1

簡單,甜美和更乾淨的+1,謝謝:) – 2016-05-13 12:15:32

11

你只是需要更換'''您的字符串內

SELECT colA, colB, colC 
FROM tableD 
WHERE colA = 'John''s Mobile' 

您還可以使用REPLACE(@name, '''', '''''')如果生成SQL動態

如果你想有一個像聲明中逃脫,那麼你需要使用轉義語法

另外值得一提的如果你不考慮這個問題,你會打開SQL注入攻擊。更多信息在谷歌或:http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

+1

可以-1發表評論? – Seph 2014-01-09 06:19:53

+0

再次與另一個-1並且沒有評論?沒有我說的是不正確的,這也不是一箇舊線程上的新帖子,因爲我幾乎整整三年前發佈了這篇文章。 – Seph 2014-02-25 06:48:59

+0

撇號!=引號 – 2014-09-19 19:38:08

19

您可以定義您的轉義字符,但只能與LIKE子句一起使用。

實施例:

SELECT columns FROM table 
WHERE column LIKE '%\%%' ESCAPE '\' 

這將在整個字符串搜索%,這是一個如何可以使用SQL ServerESCAPE標識符。