SQL Escape''

时间:2009-06-30 06:46:45

标签: sql-server escaping

我试图通过执行以下操作在SQL 2008中运行查询:

@query varchar(max)

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

EXEC(@query)

问题是由于某种原因,'Karl'周围的撇号不会被转义,即查询执行为...WHERE [Name] = Karl并失败。

有人有建议吗?

由于

卡尔

7 个答案:

答案 0 :(得分:3)

有几种方法可以在SQL Server中转义字符数据,有些人甚至提倡使用QUOTENAME()函数。

如果你真的想要对这一主题领域有深入的了解,那么我可以建议你看一下经验丰富的SQL Server开发人员认为必不可少的阅读方法,这些方法可以用来结合Dynamic T- SQL编入你的编码。

The Curse and Blessings of Dynamic SQL

答案 1 :(得分:2)

这适用于我的计算机上的SQL Server Management Studio:

@query varchar(max)

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

EXEC(@query)

答案 2 :(得分:2)

尝试:

DECLARE @query varchar(max)

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

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

要显示单引号,您需要有两个相邻的单引号。您可以使用单引号转义单引号,例如:

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

双字符('')引号在字符串文字内部时就像单个引号一样。

您是否尝试过使用变量?

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

SELECT * FROM Table WHERE [Name] = @karl_name

答案 5 :(得分:0)

这有效:

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)

输出:

'Karl'

但如果'Karl'是变量文本,强烈建议使用类似的东西:

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

答案 6 :(得分:-1)

通过使用转义栏来简单地逃避撇号\如此'SELECT * FROM Table WHERE [Name] ='\'Karl \'''

希望有所帮助