在 T-SQL 中即时转义单引号

Escape single quotes on the fly in T-SQL

有没有办法即时转义单引号,而不必用两个单引号转义每次出现的单引号?

我正在寻找等同于 PL/SQL 的引用文字 q'[这是 PL SQL 的引用文字]'[=11= 的 T-SQL ]

只是为了将来澄清 viewers/readers...

遗留的 XSL 样式表到处都是单引号和双引号,它也存储在数据库中。每次对此样式表进行更改时,它也需要在存储它的数据库列中更新。

虽然我同意很容易找到所有出现的单引号并将其替换为两个单引号,并且 insert/update 将 xml 值作为字符串,这是迄今为止的做法.必须完成两个版本,样式表脚本和样式表本身。

我一直在寻找更好的解决方案。

@Charlieface 的解决方案符合我的要求

当您从 xml 读取时,您应该能够转换为 VARCHAR 数据类型并插入,相应地进行更新。

示例代码如下:

DECLARE @table table(quotedstring varchar(100))
DECLARE @xml xml = 
'<root><t>this is PL SQL&apos;s quoted literal</t><t>this is second PL SQL&apos;s quoted literal</t></root>'

insert into @table
select t.value('t[1]','varchar(100)') as qstring from @xml.nodes('root') as x(t) 

UPDATE @table
SET quotedstring = (SELECT t.value('t[2]','varchar(100)') from @xml.nodes('root') as x(t))

SELECT * from @table
quotedstring
this is second PL SQL's quoted literal

在 T-SQL 中,您可以将两件单层外套放在一起,以排除单层外套(没有双层外套)。

例如:

'this is PL SQL's quoted literal'

应更改如下:

'this is PL SQL''s quoted literal'

要转义 XML,您通常可以使用文本编辑器将 ' 替换为 '',尽管我只会在将一个小的简单上传作为一个-关闭,在那里我可以检查没有其他语法问题。 不要以编程方式执行此操作,尤其是当您的数据不受信任时。

您应该将代码和数据分开。这意味着您不需要转义任何内容,因为数据不会作为代码的一部分进行解析。

您可以为此使用变量或参数。从客户端应用程序调用过程时,使用传入 XML 的参数。例如

CREATE OR ALTER PROCEDURE InsertXML
  @xmlData xml
AS

INSERT SomeTable(XmlData)
VALUES (@xmlData);

如果您需要以编程方式执行此操作并希望从文件加载它,您可以使用 OPENROWSET (BULK,例如

INSERT SomeTable(XMLData)
SELECT CONVERT(XML, BulkColumn)
FROM OPENROWSET(BULK 'C:\YourXML.xml', SINGLE_BLOB) AS x;

文件需要在服务器上,而不是客户端上。

您还可以使用各种工具加载文件。