我有一些使用 DBMS_XMLSCHEMA 注册的 XML 模式定义。我使用生成的 XMLTypes 创建了表。我可以使用 XMLQuery 创建 XML,如果我理解正确,如果定义正确,查询结果可以插入到表中。
最终需要将 XML 写入文件,但我不确定的部分是从头开始编写 XMLQueries 是否是生成 XML 的最佳方式。有什么方法可以让 XML 模式为指南生成 XML 存根或生成模板 XMLQuery?数据目前都在常规 Oracle 表中,但排列方式完全不同,因此任何有关基于特定注册模式集轻松导出到 XML 的信息都会很有用。
我正在尝试将 xml(实际上是 docx 文件)导入到 sql server 2008 数据库。我几乎是 XML 编程的新手。我用谷歌搜索了很多,但几乎所有的例子都有简单的 xml 文件。这里的 xml 文件有点复杂(请参见下文)。你能给我一些想法我应该如何为这个 XML 创建表以及我应该在 sql server 中运行什么查询。我需要所有标签的值,例如 w:rsidP,w:rsidRDefault,w:rsidR of w:p,w:pStyle,w:bookmarkStart,w:t 标签等。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">
<w:body>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0">
<w:pPr><w:pStyle w:val="Heading1"/>
</w:pPr><w:bookmarkStart w:id="0" w:name="_Toc212523610"/>
<w:r>
<w:t>Summary</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>
</w:p>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"><w:pPr><w:pStyle w:val="mainbodytext"/><w:ind w:right="-694"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>What is the Group Defined Practice for Integrity Management?</w:t></w:r></w:p>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"><w:pPr><w:pStyle w:val="mainbodytext"/></w:pPr><w:r><w:t xml:space="preserve">This Practice is derived from the GP Group …Run Code Online (Sandbox Code Playgroud) 我有一个带有 xml 列的表。XML类似于
<Root>
<Row>
<user>abc</user>
<Rowid>1</Rowid>
</Row>
<Row>
<user>vf</user>
<Rowid>2</Rowid>
</Row>
<Row>
<user>ert</user>
<Rowid>3</Rowid>
</Row>
<Maxrowid>3</Maxrowid>
</Root>
Run Code Online (Sandbox Code Playgroud)
现在下面的查询返回 sl_no 列和包含 xml 列的行的 myxmlcolumn 在节点 'user'() 中具有值 'abc' 或 'xyz'。下面的查询我使用类似于 sql 的 IN 选项。
SELECT
[mytable].[Sl_no],
[mytable].[myxmlcolumn]
FROM [mydb].dbo.[mytable]
WHERE
[myxmlcolumn].exist('for $x in /Root/Row where (($x/user[fn:upper-case(.)=(''ABC'',''XYZ'')])) return $x') > 0
Run Code Online (Sandbox Code Playgroud)
我想要类似的查询,它与 sql 'NOT IN' 做同样的工作。在我的情况下,我希望在 xml 列中的节点“user”() 中没有值“abc”或“xyz”的行。所以请帮我解决这个问题。
我目前正在尝试调整一个有点问题的存储过程,我注意到与运行它相关的大部分成本来自将一些 XML 解析为临时表。这是有问题的SQL:
CREATE TABLE #ChangeSet
(
RemarkTypeID TINYINT NOT NULL PRIMARY KEY,
RemarkText VARCHAR(2500) NOT NULL,
ListingID INT NOT NULL
)
INSERT INTO #ChangeSet
(RemarkTypeID,
RemarkText,
ListingID)
SELECT
T.c.value('@RemarkTypeID[1]','tinyint') AS RemarkTypeID,
T.c.value('@RemarkText[1]','varchar(2500)') AS RemarkText,
@ListingID
FROM @RemarksXml.nodes('/Remarks[1]/Remark') AS T(c)
Run Code Online (Sandbox Code Playgroud)
此外,您对正在解析的 XML 的结构有了一些了解:
<Remarks>
<Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211767" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="8" RemarkText="aaaWasher,Dryer,Refriger,Microwav" />
<Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211768" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="3" RemarkText="aaaell Maintained 3Bd 1.5Ba Semi-Detached Home In Cambridge Gardens. Garage W As Converted Into A Nice Family Room The Outside Is Maintence …Run Code Online (Sandbox Code Playgroud) 我正在使用 sql server 2005,我遇到了可以在参数中传递许多值的情况。
基于此:为一个 SQL 参数传递多个值此过程使用 XML 作为参数。
这是存储过程的代码:
CREATE PROCEDURE [DENORMV2].[udpProductBulletPointSelectByTier1NoteTypeCode] (
@Tier1 VARCHAR(10),
@LanguageID INT,
@SeasonItemID VARCHAR(5) = NULL,
@ListNoteTypeCode XML,
@CacheDuration INT OUTPUT )
WITH EXECUTE AS 'webUserWithRW'
AS
SELECT pbp.Tier1, pbp.LanguageId, pbp.NoteText, pbp.NoteTypeCode,
pbp.NoteGroup, pbp.SortOrder
FROM dbo.ProductBulletPoint pbp
WHERE Tier1 = @Tier1
AND LanguageId = @LanguageID
AND ( SeasonItemId = @SeasonItemID
OR
@SeasonItemID is null
)
AND pbp.NoteTypeCode IN (
SELECT NoteTypeCode=BulletPoint.NoteTypeCode.value('./text()[1]', 'varchar(50)')
FROM @ListNoteTypeCode.nodes('/BulletPoint/NoteTypeCode') AS BulletPoint ( NoteTypeCode )
)
SELECT @CacheDuration …Run Code Online (Sandbox Code Playgroud) performance sql-server-2005 xml sql-server optimization query-performance
是否可以查询 XML 以查找特定元素是否具有特定值?例如,如果我想查看下面的 XML 在<ContactFName>.
但请注意,元素的位置可能会改变。在某些情况下,它可能在/root/MCTLocations/MCTLocation,或者可能跳到根下,或者出现在其他地方......
并且,是否可以参数化元素名称?
DECLARE @table TABLE (XmlCol XML)
INSERT INTO @table (XmlCol) VALUES ('
<root>
<MCTClientName>John</MCTClientName>
<MCTClientCity>Palm Beach</MCTClientCity>
<MCTLocations>
<MCTLocation>
<Address>1234 Main Street</Address>
<ContactFName>Chris</ContactFName>
<ContactLName>Brandt</ContactLName>
</MCTLocation>
</MCTLocations>
</root>')
SELECT * FROM @table WHERE ??
Run Code Online (Sandbox Code Playgroud) Kenneth Fisher 发表了一篇关于如何确定我的 SSIS 包是什么 SQL 版本的博客文章?2015 年 4 月。
它有一个表,其中列出了哪些 SQL 版本映射到PackageFormatVersion在 XML 元数据中找到的 SSIS 包。这在查看 1 个单独的包时很有用。
我有一个包含大约 100 个 SSIS.DTSX包的文件夹,我需要知道它们都是哪个 SQL 版本。
如何批量确定文件夹(文件系统)中PackageFormatVersion多个.DTSX包的(即 SQL 版本)是什么?
最终目标是确定哪个是正确的 TFS 版本来获取和实施以将这些包放入,因为当前不存在源代码控制系统。Kenneth 提供的表将帮助我回答这个问题,但首先我需要确认包 SQL 版本是什么。
假设我没有安装 BIDS 或 SSDT。
假设所需的输出是这样的,其中管道指定了一个新列:
PackageFilename | PackageFormatVersion
--------------------------------------
Package1.dtsx | 3
Package2.dtsx | 4
Run Code Online (Sandbox Code Playgroud)
欢迎使用 PowerShell、TSQL、可以抓取目录结构的 3rd 方工具或其他工具。
我正在尝试生成 SQL 查询以从以下 SQL XML 中获取“DATE”值:
我试过这样的事情,但我不认为我理解这些概念。
select
xConfig.value('(/SearchjobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression) [1]','nvarchar(max)')
from
Job
Run Code Online (Sandbox Code Playgroud)
这是作为文本的 XML:
select
xConfig.value('(/SearchjobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression) [1]','nvarchar(max)')
from
Job
Run Code Online (Sandbox Code Playgroud)
预期的输出将是日期:
<SearchJobConfig>
<QueryID>1072</QueryID>
<QueryString>
<SearchCriteria name="Search query" >
<ExpressionSet logicalOperator="AND">
<SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="GREATER_EQUAL" dataType="string" caseSensitive="false">2019-06-01T04:00:00</SimpleAttributeExpression>
<SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="LESS_EQUAL" dataType="string" caseSensitive="false">2019-06-13T03:59:59</SimpleAttributeExpression>
<SimpleAttributeExpression displayName="Class" npmPropertyId="1056" searchOperation="EQUALS" dataType="int32" caseSensitive="false">65</SimpleAttributeExpression>
</ExpressionSet>
</SearchCriteria>
</QueryString>
</SearchJobConfig>
Run Code Online (Sandbox Code Playgroud)
以及在同一行上获得结果需要什么..示例:
2019-06-01T04:00:00
2019-06-13T03:59:59
Run Code Online (Sandbox Code Playgroud)
我正在使用 SQL Server 2012 企业版。
在阻塞进程报告和死锁 XML 的 SQL Server 扩展事件中,可以获取多个 SQL 句柄值以识别引发事件中涉及的查询。
由于可能涉及 1 个或多个 SQL 句柄,因此可靠地查询 XML 以检索所有这些句柄可能会很困难,并且还会使更简单的 XQuery 不正确,因为它仅检索第一个存储的值。
sqlhandle = bd.value('(process/executionStack/frame/@sqlhandle)[1]', 'varchar(130)'),
Run Code Online (Sandbox Code Playgroud)
用于说明的示例 XML 片段如下所示:
<executionStack>
<frame line="1" stmtend="108" sqlhandle="0x020000008d18260040e407ba48fc247b0cb6121c21c2cf2b0000000000000000000000000000000000000000" />
<frame line="1" stmtend="108" sqlhandle="0x02000000dd847b18dcaa4a09a89f56595186fcf91da8a7f70000000000000000000000000000000000000000" />
</executionStack>
Run Code Online (Sandbox Code Playgroud)
此 SQL Fiddle提供了更完整的示例。
我已经做到了这一点:
SELECT
sql_handle =
@x.query('for $s in //executionStack/frame return $s');
Run Code Online (Sandbox Code Playgroud)
但这并没有得到我所追求的。扩展该查询以使用该@sqlhandle属性会引发错误:
SELECT
sql_handle =
@x.query('for $s in //executionStack/frame/@sqlhandle return $s');
Run Code Online (Sandbox Code Playgroud)
消息 2396,级别 16,状态 1,第 60 行 XQuery [query()]:属性不得出现在元素外部
我怎样才能像这样查询 XML 以将所有列出的 SQL 句柄作为逗号分隔列表返回?
我正在尝试运行脚本来更新 XML 列:
UPDATE DataImpTable
SET serviceData.modify('replace value of (/SMObjInfo/CentralData/SMData/CentralSDItem/ControlData/text())[1] with "9876"')
WHERE identifier=5
Run Code Online (Sandbox Code Playgroud)
UPDATE DataImpTable
SET serviceData.modify('replace value of (/SMObjInfo/CentralData/SMData/CentralSDItem/ControlData/text())[1] with "9876"')
WHERE identifier=5
Run Code Online (Sandbox Code Playgroud)
将 的值更改ControlData为 9876,但该值在 XML 中似乎没有更改/SMObjInfo/CentralData/SMData/CentralSDItem/ControlData。
它与类型化和非类型化 XML 有什么关系?
xml ×10
sql-server ×9
xquery ×3
t-sql ×2
optimization ×1
oracle ×1
performance ×1
powershell ×1
query ×1
ssis ×1
update ×1