加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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需要正确替换值的麻烦,而不是你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读