Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何获取sql server xml列的xml安全版本_Sql Server_Xml_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 如何获取sql server xml列的xml安全版本

Sql server 如何获取sql server xml列的xml安全版本,sql-server,xml,sql-server-2005,tsql,Sql Server,Xml,Sql Server 2005,Tsql,有没有办法在SQLServer中获取xml列的xml安全版本 xml安全是指转义特殊字符,如,,&,等等 我想避免自己做替换。sql server中是否有内置函数 我想要实现的是将xml内容存储到另一个xml属性中。xml列的内容是xml。根据定义,这是XML安全的 是否需要在另一个XML文档的XML元素或属性中包含列中的XML?然后将外部XML保存为新文档中的字符串。我假设XML安全是指转义XML特殊标记。如果希望在另一个XML文档中包含一个XML列,则有两个选项: 将列投影为[*]:选择…,

有没有办法在SQLServer中获取xml列的xml安全版本

xml安全是指转义特殊字符,如,,&,等等

我想避免自己做替换。sql server中是否有内置函数


我想要实现的是将xml内容存储到另一个xml属性中。

xml列的内容是xml。根据定义,这是XML安全的


是否需要在另一个XML文档的XML元素或属性中包含列中的XML?然后将外部XML保存为新文档中的字符串。

我假设XML安全是指转义XML特殊标记。如果希望在另一个XML文档中包含一个XML列,则有两个选项:

将列投影为[*]:选择…,xmlcolumn为[*]。。。从…起对于xml路径。。。这将在结果XML中嵌入列的XML内容。如果列具有值,则结果将与值相同。 将列投影为列名:选择…,xmlcolumn。。。从…起对于xml路径。。。这将插入列的内容作为值,即它将转义它。与上面相同的值将产生elementvalue/element。 如果你的问题是关于其他事情的,那么你必须以适当的方式重新措辞,并正确使用术语。不要发明除了你自己没人懂的新术语

更新:

如果要在列中插入XML值,则无需执行任何操作。客户端库知道如何处理正确的转义。只要你写的代码正确。请记住,XML不是字符串,永远不应该被视为字符串。如果在客户机中编写XML,请使用适当的XML库等。将XML传递到SQL Server时,请使用适当的类型:。存储过程应使用适当的参数类型:。阅读时,请使用适当的方法读取XML:。在miriad设计器LINQ to SQL、EF等中声明类型也是如此。最终,不需要手动转义XML字符。如果您发现自己在这样做,那么您使用了错误的API,您必须回到绘图板

阅读是一个好的开始

最后,要在描述用表B的XML列更新表A的XML列时操作XML,具体地说,可以使用,并使用以下命令在XQuery中绑定表B列:


在您的评论中,您威胁XML是一个字符串,正如我已经说过的,您永远不应该这样做:字符串和XML就像水和油一样。

这不是对这个问题的直接回答,但对于任何试图在TSQL中用XML转义字符串的人来说,我写了一个小函数:

CREATE FUNCTION escapeXml 
(@xml nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
    declare @return nvarchar(4000)
    select @return = 
    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(@xml,'&', '&')
                ,'<', '&lt;')
            ,'>', '&gt;')
        ,'"', '&quot;')
    ,'''', '&#39;')

return @return
end
GO

另一种更简单的xml转义字符串的方法是使用以下内容:

SELECT @String FOR XML PATH('')
e、 g


然后从那里使用@string

xmlsafe??你这是什么意思??请解释一下——在我看来,这不是一个常用的表达方式……你说的避免替换自己是什么意思?你说的这个替代品是什么?我打赌他认为他需要翻译@Chris。我的意思是我不想替换为SELECT @String FOR XML PATH('')
DECLARE @Input NVARCHAR(4000) = 'bacon & eggs'
DECLARE @String = (SELECT @Input FOR XML PATH(''))