sql-server – 在SQL Server中转义单引号
发布时间:2020-12-12 16:30:53 所属栏目:MsSql教程 来源:网络整理
导读:我试图执行以下语句来转义单引号(即使用两个单引号): declare @year varchar(max)set @year = '111,11';exec ('SELECT * FROM SplitValues(' + @year + ','','')'); 我甚至尝试使用char(39)而不是引号: declare @year varchar(max)set @year = '111,' + cha
我试图执行以下语句来转义单引号(即使用两个单引号):
declare @year varchar(max) set @year = '111,11'; exec ('SELECT * FROM SplitValues(' + @year + ','','')'); 我甚至尝试使用char(39)而不是引号: declare @year varchar(max) set @year = '111,' + char(39) + ',' + char(39) + ')'); 但这没有帮助.这是我在本网站上发现的唯一两个解决方案.任何帮助? 这是简化的查询以清除所有问题: declare @year varchar(max) set @year = '111,11'; SELECT * FROM SplitValues(@year,',') 我想实现这一点,但是使用动态查询. 解决方法一个忠告的话.测试动态脚本时,首先只显示它,而不是执行它.这样你就可以看到它完全像EXEC语句所看到的那样.现在问题.你应该记住,你不是将变量传递给SplitValues,而是将变量的值连接到脚本中.由于该值为varchar,因此应将其与引号连接.他们的缺席是唯一的问题. 在这两种情况下,第二个参数的逗号(逗号)都被正确地转义.所以,只需使用任何一种方法在第一个参数周围添加引号: >重复引号: DECLARE @year varchar(max),@sql varchar(max); SET @year = '111,11'; SET @sql = 'SELECT * FROM SplitValues(''' + @year + ''','')'; SELECT @sql; >使用CHAR(39): DECLARE @year varchar(max),11'; SET @sql = 'SELECT * FROM SplitValues(' + CHAR(39) + @year + CHAR(39) + ',' + CHAR(39) + ',' + CHAR(39) + ')'; SELECT @sql; 显然,第一种方法比较紧凑,但是像我所说的那样,两者都很好,正如this SQL Fiddle demo所示. 但是,请注意,如果您原谅双关语,您可以轻松逃脱这个问题.而不是EXEC(),您可以使用EXEC sp_executesql,这允许您使用参数.这是与使用sp_executesql重写的相同的脚本: DECLARE @year varchar(max),@delim char(1); SET @year = '111,11'; SET @delim = ','; EXEC sp_executesql N'SELECT * FROM SplitValues(@year_param,@delim_param)',N'@year_param varchar(max),@delim_param char(1)',@year,@delim; 如你所见,没有必要担心转义引号:SQL Server需要正确替换值的麻烦,而不是你. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |