标签: xml

将 FOR XML 结果存储在 xml 变量中(使用 WITH 语句)

我正在使用这样的 SQL 查询创建 xml:首先是 CTE,然后SELECT是创建 XML的语句。

那个有效。但是,我想将输出存储在 XML 变量中(如果更容易,表变量也可以)。但我似乎无法让它工作(见第二个片段)。有什么建议?

有效的 XML 生成:

;WITH cte
       AS (SELECT ...
          )
  SELECT ...
  FOR XML PATH ('root')
Run Code Online (Sandbox Code Playgroud)

这是我尝试将它存储在表变量中,但我无法让它工作:

DECLARE @myXml TABLE(
    x xml
);
;WITH cte
       AS (SELECT ...
          )
  INSERT INTO @myXml SELECT ...
  FOR XML PATH ('root')  
Run Code Online (Sandbox Code Playgroud)

这是由此产生的错误消息:

Meldung 6819, Ebene 16, Status 1, Zeile 240
Die FOR XML-Klausel ist in einer INSERT-Anweisung nicht zulässig。

(我不能在插入语句中使用 FOR XML。)

sql-server-2008 xml

6
推荐指数
1
解决办法
8571
查看次数

将结果导出到 XML

我正在尝试从 SQL 查询创建 XML 文件。输出应如下图所示

在此处输入图片说明

标签BranchID再次出现的地方,SubParentBranchID好像有多个SubBranchIDBranchID. 在下图中,BranchID94 有两个SubBranchID63 和 64。

我管理了这个 SQL 查询

SELECT
a.[heading_id] as BranchID,
c.[name] as BranchName,
a.[business_id] as SubBranchID, 
a.[heading_id] as SubParentBranchID,
b.[name] as SubBranchName
   FROM [BUSINESSHEADINGLINK] as a
   join [BUSINESS] as b on a.business_id = b.business_id
   join [HEADING] as c on   a.heading_id = c.heading_id 
FOR XML PATH ('Branch'), ROOT('BranchInfo')
Run Code Online (Sandbox Code Playgroud)

这给了我以下 XML

在此处输入图片说明

在这里你可以看到我既没有标签<SubBranches>也没有<SubBranch>. 我也没有<SubParentBranchID>。XML 文件应如下所示:

在此处输入图片说明

任何人都可以帮助我使用 SQL 代码吗? …

xml sql-server t-sql

6
推荐指数
1
解决办法
1万
查看次数

存储过程在手动运行时工作,而不是在 SQL 代理作业中运行

当我通过 SQL 代理作业执行存储过程时,收到以下错误消息:

以用户身份执行:NT AUTHORITY\SYSTEM。
XML 解析:第 10 行,字符 33,输入意外结束 [SQLSTATE 42000](错误 9400)。
步骤失败。
Sql 严重性 16,Sql 消息 ID 9400

但是,当我手动运行它时,它是成功的。

这是我正在执行的程序:

decalre @URL VARCHAR(max)
 set @URL='http://www.spa.gov.sa/english/rss.xml'

 declare  @xmlT TABLE ( yourXML XML )
DECLARE @Response nvarchar(max)
DECLARE @XML xml
DECLARE @Obj int 
DECLARE @Result int 
DECLARE @HTTPStatus int 
DECLARE @ErrorMsg nvarchar(MAX)

EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT 

EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
EXEC @Result …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2008-r2

6
推荐指数
1
解决办法
8610
查看次数

什么是最有效的 SELECTIVE XML 索引?

我正在尝试为 1 亿行表中的 XML 列确定最有效的选择性 XML 索引。我的问题类似于:

用于选择性 Xml 索引的 Sql Server 2012 扩展事件未显示结果

但是答案中指定的选择性索引的具体好处没有详细讨论。

以下是查询的简化版本:

;WITH CTE AS
( SELECT 1 AS ID,
              CONVERT(XML, '<Root>
                              <ParentTag ParentTagID="Sample Text">
                                <ChildTag1>5</ChildTag1>
                                <ChildTag1>6</ChildTag1>
                                <ChildTag1>7</ChildTag1>
                                <ChildTag2>8</ChildTag2>
                                <ChildTag2>9</ChildTag2>
                                <ChildTag2>10</ChildTag2>
                                <OtherTag>LargeIrrelevantData</OtherTag>
                              </ParentTag>
                            </Root>'
                      ) AS SampleXML
)
SELECT * INTO dbo.CTE FROM CTE

SELECT ID,
       Root.ParentTag.value('@ParentTagID','NVARCHAR(MAX)') AS ParentTagID,
       RootParentTag1.ChildTag1.value('(text())[1]', 'NVARCHAR(MAX)') AS ChildTag1,
       NULL
FROM CTE
OUTER APPLY CTE.SampleXML.nodes('/Root/ParentTag') as Root(ParentTag)
OUTER APPLY Root.ParentTag.nodes('ChildTag1') as RootParentTag1(ChildTag1)
UNION
SELECT ID,
       Root.ParentTag.value('@ParentTagID','NVARCHAR(MAX)') AS ParentTagID,
       NULL,
       RootParentTag2.ChildTag2.value('(text())[1]', 'NVARCHAR(MAX)') AS …
Run Code Online (Sandbox Code Playgroud)

performance index xml sql-server query-performance

6
推荐指数
1
解决办法
1399
查看次数

如何为 XML 类型编写此 SQL 查询?

我正在使用 SQL Server 2012,其中有一个表[abc],其中有一个名为[Information][XML] 类型的列。

此列具有以下值 -

<Information>
  <Groups>
    <Group Name="Monitor">
      <Items>
        <Item>
          <Name>Cid</Name>
          <Value>2323232323</Value>
        </Item>
        <Item>
          <Name>Tid</Name>
          <Value>6656565656</Value>
        </Item>
      </Items>
    </Group>
  </Groups>
</Information>
Run Code Online (Sandbox Code Playgroud)

如何编写可以查询此列并进一步提取值的 SQL 查询[Tid]

xml sql-server sql-server-2012

6
推荐指数
2
解决办法
694
查看次数

如何查询 XML 列集中的确切值

我有一个包含 80 多个稀疏列和一个列集列的表,这是一个简单的例子:

DROP TABLE IF EXISTS #ColumnSet
GO

CREATE TABLE #ColumnSet
(
    Id        INT          NOT NULL
  , Value1    VARCHAR(100) SPARSE NULL 
  , Value2    VARCHAR(100) SPARSE NULL 
  , Value3    VARCHAR(100) SPARSE NULL 
  , Value4    VARCHAR(100) SPARSE NULL 
  , AllValues XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
)
GO

INSERT INTO #ColumnSet
(Id, Value1, Value2, Value3, Value4)

VALUES
(1, 'POSITIVE', NULL, NULL, NULL),
(2, 'NEGATIVE', NULL, 'NEGATIVE', NULL),
(3, NULL, NULL, 'NEGATIVE', 'POSITIVE'),
(4, 'NEGATIVE', NULL, 'THIS IS NOT A POSITIVE RESULT', NULL)
GO …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery sql-server-2016 sparse-column

6
推荐指数
2
解决办法
1150
查看次数

如何将 XML 数组拆分为单独的行(同时保持一致性)

我正在处理这个确切的堆栈交换部分的数据库转储。在我处理它的过程中,我遇到了一个我目前无法解决的问题。

在 XML 文件 Posts.xml 中,内容如下所示

在此处输入图片说明

当然有多行,但这就是一个的样子。转储中已经提供了一个 Tags.xml 文件,这使得该图片中的“Tags”属性实际上应该是它的单独表(多对多)变得更加明显。

所以现在我正试图找出一种如何提取标签的方法。这是我尝试做的:

CREATE TABLE #TestingIdea (
Id int PRIMARY KEY IDENTITY (1,1),
PostId int NULL,
Tag nvarchar (MAX) NULL
)
GO
Run Code Online (Sandbox Code Playgroud)

? 我创建的表来测试我的代码。我已经用标签和 PostIds 填充了它

SELECT  T1.PostId,
        S.SplitTag
FROM (
    SELECT  T.PostId, 
            cast('<X>'+ REPLACE(T.Tag,'>','</X><X>') + '</X>' as XML) AS NewTag
    FROM #TestingIdea AS T
    ) AS T1
CROSS APPLY (
    SELECT tData.value('.','nvarchar(30)') SplitTag
    FROM T1.NewTag.nodes('X') AS T(tData)
    ) AS S
GO
Run Code Online (Sandbox Code Playgroud)

然而此代码返回此错误

XML parsing: line 1, character 37, illegal qualified name character …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery string-splitting sql-server-2017

6
推荐指数
1
解决办法
2431
查看次数

必须具备哪些条件才能根据模式验证 XMLTYPE?

我有一个生成 XMLTYPE 的过程,我想根据模式对其进行验证。问题是运行 createSchemaBasedXML 似乎存在权限问题,因为当我以 AUTHID DEFINER 运行该过程时,它给出错误“ORA-31050:拒绝访问”,但是当我以 AUTHID CURRENT_USER 运行它时,它实际上返回了一个特定于验证的错误(我会单独处理)。CURRENT_USER 不是可接受的解决方案。

我的假设是 CURRENT_USER 有效,因为用户具有 XMLADMIN 角色。授予角色包含的权限并不能解决问题,因此必须是角色能够绕过 ACL。

问题是,查询 RESOURCE_VIEW 以获取保护资源的 ACL 表明它受/sys/acls/all_owner_acl.xml. DBMS_XDB.getPrivileges显示 xsd 具有以下所有权限:

  <read-properties/>
  <read-contents/>
  <write-config/>
  <link/>
  <unlink/>
  <read-acl/>
  <write-acl-ref/>
  <update-acl/>
  <resolve/>
  <link-to/>
  <unlink-from/>
  <dav:lock/>
  <dav:unlock/>
  <dav:write-properties/>
  <dav:write-content/>
  <dav:execute/>
  <dav:take-ownership/>
  <dav:read-current-user-privilege-set/>
Run Code Online (Sandbox Code Playgroud)

使用DBMS_XDB.getAclDocument表明主体dav:owner拥有所有权限,因此这不足以允许模式的所有者创建基于模式的 XML。考虑到这个想法,我创建了一个块来运行DBMS_XDB.createResource创建一个新的 ACL。我可以成功创建 ACL,并且从 SQLDeveloper 我可以看到它存在于我创建它的位置。

在这个过程中有很多地方我可能会出错,所以我正在寻找的核心是:

必须具备哪些条件才能根据模式验证 XMLTYPE?

=== 2013 年 4 月 3 日更新 ===
我可以将我的 xsd 文件的 acl 设置/sys/acls/all_all_acl.xml/sys/acls/all_owner_acl.xml. 和以前一样,这些都不能解决权限问题。我还尝试了使用从 …

oracle xml oracle-11g-r2 access-control

5
推荐指数
1
解决办法
1214
查看次数

在 SQL Server 2012 中的 TSQL 函数中使用 XSD 验证 XML?

我需要在 TSQL 中使用 XSD 验证 XML。为了使此任务半自动化,我需要在 TSQL 函数中执行此操作。

为了进行验证,我必须将值设置为 XML,如果它无效,我将收到一个错误。

我的问题是在 TSQL 函数内部我不能使用TRY / CATCH. 这是正确的方式吗,如果有可能做到这一点?

xml t-sql sql-server-2012 functions sql-clr

5
推荐指数
1
解决办法
917
查看次数

How to resolve this 'XML Validation: Declaration not found for element' error?

I'm new to SQL Server and I have this task to complete (for learning purposes), yet I'm unable to figure out this error due to inexperience with XML Schemas (I think)

Here's what I'm trying to do -

  1. Create a table with 2 columns - ID, XML info for some product (non-typed).
  2. Add a row entry, that is, XML data for a product.
  3. Create an XML Schema for the XML-product-data.
  4. Bind this schema to the one (column) in the table. …

xml sql-server sql-server-2012 xsd

5
推荐指数
1
解决办法
3200
查看次数