Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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更新的openxml where子句_Sql Server_Tsql_Filter_Flags - Fatal编程技术网

Sql server 用于sql更新的openxml where子句

Sql server 用于sql更新的openxml where子句,sql-server,tsql,filter,flags,Sql Server,Tsql,Filter,Flags,这是我的xml <root> <children> <child id = "1"> <description>This is child 1</description> </child> <child id = "2"> <description>This is child 2</description> </child> <child id =

这是我的xml

<root>
<children>
 <child id = "1">
  <description>This is child 1</description>
 </child>
 <child id = "2">
    <description>This is child 2</description>
 </child>
 <child id = "3">
    <description>This is child 3</description>
 </child>
</children>
</root>
提前谢谢 尼克


p、 s:xml的结构无法更改。我需要解决此约束。

假设您使用的是SQL Server 2005或更高版本,并且XML存储在名为
@input
的变量中,您可以尝试以下操作:

declare @input XML 

set @input = '<root>
<children>
 <child id="1">
  <description>This is child 1</description>
 </child>
 <child id="2">
    <description>This is child 2</description>
 </child>
 <child id="3">
    <description>This is child 3</description>
 </child>
</children>
</root>'

;with GrabXML AS
(
    select
        child.value('@id', 'int') as 'ID',
        child.value('(description)[1]', 'varchar(50)') as 'Description'
    from
        @input.nodes('/root/children/child') as n(Child)
)
update dbo.Child
set description = g.Description
from GrabXML g
where dbo.Child.ID = g.ID
其次,您需要检查表
dbo.Child
中的列的长度,并截断从XML中提取的字符串的长度,使其不超过数据库列的长度:

update dbo.Child
set description = SUBSTRING(g.Description, 1, 575)

在这里,您最多需要从
g.Description
字符串中提取数据库列
dbo.Child.Description
允许的字符数。

您的xml无效。属性必须是带有双引号的
。这是一个输入错误还是“xml”看起来像这样?我已经做了更改。那是个打字错误。对不起,谢谢你,马克。但是我正在从文件中加载xml。编辑我的帖子。(这是我想做的)@Nick-使用行
中马克的代码;使用GrabXML
以后的版本,使用这部分代码声明@input xml选择@input=c从openrowset(bulk'c:\Test.xml',single_blob)作为临时(c)Marc的上述解决方案已成功。但它有时会失败,并出现以下错误:“Msg 8152,级别16,状态14,第2行字符串或二进制数据将被截断。语句已终止。”这可能是因为XML类型的@doc变量无法获取大量数据。Wat可能是解决这个问题的方法?@nick:目标表中的某些列显然对于导入的数据来说太短了。。。
select
   child.value('@id', 'int') as 'ID',
   child.value('(description)[1]', 'varchar(999)') as 'Description'
update dbo.Child
set description = SUBSTRING(g.Description, 1, 575)