sql-server – 在SQL Server中转义单引号

前端之家收集整理的这篇文章主要介绍了sql-server – 在SQL Server中转义单引号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图执行以下语句来转义单引号(即使用两个单引号):
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需要正确替换值的麻烦,而不是你.

原文链接:https://www.f2er.com/mssql/82449.html

猜你在找的MsSQL相关文章