小编Wiz*_*Wiz的帖子

如何在SQL Server 2008 R2中将XML的一部分读取为XML

我正在使用SQL Server 2008 R2,我的存储过程采用结构化XML,其中包含多个级别,如下所示:

DECLARE @XML xml = 
'<Main>
    <User id="1">
        <Departments isSingle="0">
            <Department id="1">Admin</Department>
            <Department id="2">HR</Department>
            <Department id="3">Development</Department>
        </Departments>
    </User>
    <User id="2">
        <Departments isSingle="1">
            <Department id="1">Admin</Department>            
        </Departments>
    </User>
</Main>'
Run Code Online (Sandbox Code Playgroud)

从上面的例子我想为具有多个部门的用户获得2列(isSingle ="0"),其中第一列是用户id,第二列是整个<Departments>XML.

我可以使用以下查询获取用户标识但是如何将Departments部分作为XML获取:

SELECT
      T.C.value('(../@id)','int') AS UserID
    , T.C.value('(../Departments)[1]','nvarchar(max)') AS DepartmentsXML 
FROM 
@XML.nodes('/Main/User/Departments[@isSingle="0"]') AS T(C)
Run Code Online (Sandbox Code Playgroud)

它不允许我xml用作数据类型代替nvarchar(max)

如果细节不明确,请告诉我,我会尽力改进.任何帮助表示赞赏.

xml t-sql xquery sql-server-2008-r2

4
推荐指数
1
解决办法
5339
查看次数

如何在 SQL Server 2008 中合并 2 个 XML 变量

假设我在 SQL Server 2008 中有 2 个 XML 变量,其中包含以下 XML

DECLARE @FIRST XML = '<DBPerson>
                          <firstname>John</firstname>
                          <lastname>Bob</lastname>
                      </DBPerson>',
        @Second XML = '<FromUI>
                           <lastname>New Bob</lastname>
                           <age>39</age>
                       </FromUI>';
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

<DBPerson>
     <firstname>John</firstname>
     <lastname>New Bob</lastname>
     <age>39</age>
</DBPerson>
Run Code Online (Sandbox Code Playgroud)

基本上我想将 2 个 XML 变量的内容合并到一个变量@Second应该优先的地方(如果一个节点同时存在于@First& 中@Second,则@Second应该考虑内部的节点)。

我采取的方法是首先获取两个根元素中所有唯一元素的列表,如下所示:

WITH ALLFields AS
(
    SELECT 
          x.y.value('local-name(.)','varchar(50)') As Element   
    FROM @Second.nodes('FromUI/*') AS x(y)
    UNION
    SELECT 
          x.y.value('local-name(.)','varchar(50)') As Element   
    FROM @FIRST.nodes('DBPerson/*') AS x(y)
)
SELECT * FROM ALLFields AF
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从这里开始。我知道我必须首先使用sql:column某个地方来构建一个表来获取节点名称及其值(基于AllFields),然后我可以使用它 …

xml t-sql xquery sql-server-2008

3
推荐指数
1
解决办法
8018
查看次数

如何通知父母的变更

我正在使用KnockoutJS,我想知道一种方法,observableArray中的可观察对象可以通知父级更改.这是一个例子:

http://jsfiddle.net/paragnair/CEEZ5/

HTML:

<h1 id="heading"> <text data-bind="text:childrenCount"></text> Fields selected</h1>
<table id="form">
<tbody data-bind="foreach:children">
    <tr>
        <td data-bind="text:name"></td>
        <td><input type="checkbox" data-bind="checked:isSelected"/></td>
    </tr>
</tbody>
</table>

<a href="#" id="btn-add">Add More Fields</a>?
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

var Child = function(name) {
    var self = this;
    self.name = ko.observable(name);
    self.isSelected = ko.observable(false);
},
    Parent = function() {
        var self = this;
        self.children = ko.observableArray([
            new Child('One'),
            new Child('Two'),
            new Child('Three')
            ]);
        self.children.subscribe(function(children) {
            header.childrenCount($.map(children, function(a) {                
                return a.isSelected() ? 1 : null;
            }).length);
        });
    },
    header = {
        childrenCount: …
Run Code Online (Sandbox Code Playgroud)

knockout.js

2
推荐指数
1
解决办法
4864
查看次数