如何在SQL变量中存储单引号?附字段前后拼接实现需求
搞定SQL里单引号存储与XML字段拼接的问题
嘿,我看你在尝试用变量存单引号,然后给临时表的XML字段前后加单引号,这里有个小细节得调整下,咱们捋清楚:
为啥你的写法可能出问题?
在SQL里,单引号是字符串的边界标记,要在字符串里放一个实际的单引号,得用两个连续的单引号来转义。你写的set @qt = '''其实是对的(前两个单引号转义出一个实际的单引号,第三个用来闭合字符串),不过可能容易搞混,另外还要注意XML类型和字符串拼接时的类型转换问题。
修正后的完整代码
-- 声明存储单引号的变量 Declare @qt varchar(5); -- 用转义方式赋值单引号,或者用CHAR(39)更直观 set @qt = ''''; -- 或者写成 set @qt = CHAR(39); (CHAR(39)是单引号的ASCII码,避免转义混乱) Declare @xmlt xml; -- 先给XML变量赋个示例值,你可以换成自己的内容 set @xmlt = '<root><content>sample data</content></root>'; -- 更新临时表:先把XML转成字符串,拼接单引号,再转回XML类型(如果XMLDatat是xml类型的话) update #TEMP_TABLE2 set XMLDatat = CAST(CONCAT(@qt, CAST(@xmlt AS nvarchar(max)), @qt) AS xml);
几个关键提醒
单引号的两种赋值方式:
- 转义写法:
set @qt = '''(三个单引号),实际存储的是一个单引号(第一个是字符串起始,第二个是转义的单引号,第三个是字符串结束);要是写四个单引号'''',存储的就是两个单引号。 - ASCII码写法:
set @qt = CHAR(39),这个更直观,不用数单引号,适合容易搞混转义的情况。
- 转义写法:
XML类型的拼接注意:
如果你的XMLDatat字段是xml类型,直接用CONCAT拼接会把xml自动转成nvarchar,但更新回xml字段时需要显式转回去,不然会报类型不匹配的错误。如果XMLDatat是字符串类型(比如nvarchar(max)),那直接写set XMLDatat = CONCAT(@qt, @xmlt, @qt)就行,不用CAST。
更简洁的替代方案(不用变量)
要是只是单纯给字段前后加单引号,其实不用声明变量,直接在CONCAT里写转义的单引号就行,更省事:
update #TEMP_TABLE2 set XMLDatat = CAST(CONCAT('''', CAST(XMLDatat AS nvarchar(max)), '''') AS xml);
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

