SQL Escape ' '

烈酒焚心 提交于 2019-12-01 05:40:18

There are several ways that you can escape character data in SQL Server, some people even advocate the use of the QUOTENAME() functions.

If you really want to develop of solid understanding of this subject area then may I recommend that you take a look at what experienced SQL Server Developers consider to be essential reading with regard to the different methods you can use to incorporate Dynamic T-SQL into your coding.

The Curse and Blessings of Dynamic SQL

Try:

DECLARE @query varchar(max)

SET @query = 'SELECT * FROM Table WHERE [Name] = ''Karl'''

PRINT 'when in doubt, print the query out: '+ISNULL(@query,'')
EXEC(@query)

To have a single quote appear, you need to have two adjacent single quotes. You escape a single quote with a single quote, for example:

PRINT ''''     --will print a one single quote
PRINT ''''''   --will print two single quotes
PRINT 'can''t' --will print can't

This works on my machine from SQL Server Management Studio:

@query varchar(max)

SET @query = 'SELECT * FROM Table WHERE [Name] = ''''''Karl'''''''

EXEC(@query)

A double single ('') quote will act like a single single quote when inside a string literal.

Have you tried using a variable?

declare @karl_name varchar(10);
set @karl_name = '''Karl''';

SELECT * FROM Table WHERE [Name] = @karl_name

do like this SET @query = 'SELECT * FROM Table WHERE [Name] = ''''Karl'''''

This works:

create table #demo([Name] varchar(max))
insert into #demo([Name]) values('''Karl''')
insert into #demo([Name]) values('Karl')
declare @query varchar(max)
set @query = 'SELECT * FROM #demo WHERE [Name] = ''''''Karl'''''''
EXEC(@query)

Output:

'Karl'

But if 'Karl' is variable text, it's highly recommended to use something like this instead:

declare @query nvarchar(max)
declare @param varchar(max)
set @param = N'''Karl'''
set @query = N'SELECT * FROM #demo WHERE [Name] = @param'
exec sp_executesql @query, N'@param varchar(max)', @param

Simply escape the apostrophes by using the escaping bar \ like this 'SELECT * FROM Table WHERE [Name] = ' \'Karl\' ' '

Hope it helps

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!