我正在使用这样的 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 查询创建 XML 文件。输出应如下图所示
标签BranchID再次出现的地方,SubParentBranchID好像有多个SubBranchID与BranchID. 在下图中,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 代码吗? …
当我通过 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) 我正在尝试为 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) 我正在使用 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]?
我有一个包含 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 文件 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) 我有一个生成 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. 和以前一样,这些都不能解决权限问题。我还尝试了使用从 …
我需要在 TSQL 中使用 XSD 验证 XML。为了使此任务半自动化,我需要在 TSQL 函数中执行此操作。
为了进行验证,我必须将值设置为 XML,如果它无效,我将收到一个错误。
我的问题是在 TSQL 函数内部我不能使用TRY / CATCH. 这是正确的方式吗,如果有可能做到这一点?
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 -
xml ×10
sql-server ×7
t-sql ×2
xquery ×2
functions ×1
index ×1
oracle ×1
performance ×1
sql-clr ×1
xsd ×1