我试图通过执行以下操作在SQL 2008中运行查询:
@query varchar(max)
SET @query = 'SELECT * FROM Table WHERE [Name] = ' 'Karl' ' '
EXEC(@query)
问题是由于某种原因,'Karl'
周围的撇号不会被转义,即查询执行为...WHERE [Name] = Karl
并失败。
有人有建议吗?
由于
卡尔
答案 0 :(得分:3)
有几种方法可以在SQL Server中转义字符数据,有些人甚至提倡使用QUOTENAME()函数。
如果你真的想要对这一主题领域有深入的了解,那么我可以建议你看一下经验丰富的SQL Server开发人员认为必不可少的阅读方法,这些方法可以用来结合Dynamic T- 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 \'''
希望有所帮助