小编Rom*_*kar的帖子

如何从SQL Server 2008返回XML,该XML由多个选择共享一个共同父级构成

我已经尝试使用"FOR XML PATH","FOR XML EXPLICIT"和"FOR XML AUTO",但数据永远不会使用正确的层次结构.

基本上,我有一个父表(Customers)和3个子表.每个表都有一个customerid列.从Customers表到3个子表中的每一个都有一对多的关系.

作为一个模拟示例,我有一个父"客户"表,我有3个其他表 - 产品,爱好和车辆 - 所有与customerid相关的Customers表.

实现以下类型结构的SQL代码是什么 -

<Customers>
    <Customer customerid="1" name="Fred">
       <Products>
           <Product productname="table" />
           <Product productname="chair" />
           <Product productname="wardrobe" />
       </Products>
       <Hobbies>
           <Hobby hobbyname="Golf" />
           <Hobby hobbyname="Swimming" />
       </Hobbies>
       <Vehicles>
           <Vehicle name="Car" color="Red" />
           <Vehicle name="Bicycle" color="Blue" />
       </Vehicles>
    </Customer>
    <Customer customerid="2" name="Sue">
       <Products>
           <Product productname="CD player" />
           <Product productname="Picture frame" />
       </Products>
       <Hobbies>
           <Hobby hobbyname="Dancing" />
           <Hobby hobbyname="Reading" />
       </Hobbies>
       <Vehicles>
           <Vehicle name="Car" color="Yellow" />
       </Vehicles>
    </Customer>
</Customers>
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server sqlxml sql-server-2008

5
推荐指数
2
解决办法
2万
查看次数

生命游戏:如何跟踪活跃细胞

现在我已经阅读了其他stackoverflow Game of Life问题,并且还贪婪地使用Google搜索.我知道如何为我的Python生命游戏实现.我想跟踪网格中的活动单元格.问题是我是坚持我应该如何编码.
这就是我的想法,但除此之外,我的智慧结束了:

  • 维护一个ActiveCell列表,该列表由活动
    死或活的单元坐标元组组成.
  • 在计算下一代时,只需遍历ActiveCell列表,计算单元状态并检查状态是否发生变化.
  • 如果状态发生更改,请将所有当前单元格邻居添加到列表中
  • 如果没有,请从列表中删除该单元格
  • 现在问题是:("." - >其他单元格) 如果A满足3)那么它会添加B,C,D 然后如果B也为3)返回true,这意味着它将再次添加A,C(复制)
    B C D
    . A .
    . . .


我考虑使用OrderedSet或其他东西来处理订单并避免重复.但是我仍然遇到了这些问题.我只需要一个方向.

python

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

使用 SQL XPATH 查询获取 XML 元素名称和属性值

给定一个 XML 类型的字符串,例如

declare @xml xml

SET @xml = 
'<PO>
  <Amount type="approved">10.00</Amount>
  <Year type="">2013</Year>
  <GeneralNotes>
    <Note>
      <NoteText type="instruction">CallVendor</NoteText>
      <Date type="">1-1-2013</Date>
    </Note>
    <Note type="">
      <NoteText type="instruction">ShipNow</NoteText>
      <Date type="">2-2-2013</Date>
    </Note>
  </GeneralNotes>
</PO>'
Run Code Online (Sandbox Code Playgroud)

我想获取每个元素及其属性(如果有的话)。我想要的输出(没有重复)是

ElementName   ElementAttribute

PO  
Amount   approved
Note     instruction
Run Code Online (Sandbox Code Playgroud)

我试过类似于这一行的代码

SELECT T.doc.query('fn:local-name(.)') 
FROM @xml.nodes('PO//*[1]') AS T(doc)
Run Code Online (Sandbox Code Playgroud)

这会导致重复,我不确定如何选择属性值。我只需要第一次出现(即。GeneralNotes/Note[1])。我有一个包含许多其他元素名称的大文件,所以我不想单独解析它们。

xml sql t-sql sql-server sqlxml

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

T-SQL,将 XML 数据加载到局部变量中

我想知道,如何将 XML 内容从任意文件加载到局部变量中?

这适用于固定文件:

DECLARE @xml XML
SET @xml = 
(
  SELECT *
  FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)

但是,我想从任何任意文件加载数据。

这不起作用(因为 BULK 似乎只支持 String 参数)

DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
SET @xml = 
(
  SELECT *
  FROM OPENROWSET(BULK @file, SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下操作(没有成功,因为执行 EXEC 时局部变量(@xml)似乎超出了范围):

DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
DECLARE @bulk NVARCHAR(MAX) = 'SET @xml = (SELECT * FROM OPENROWSET(BULK ''' + @file + ''', SINGLE_BLOB) AS data)'
EXEC (@bulk)
Run Code Online (Sandbox Code Playgroud)

我猜我需要使用临时表,但是如何使用?

xml sql sql-server sqlxml

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

避免“不能嵌套 INSERT EXEC 语句”

我知道这不可能嵌套insert ... exec语句,但我仍然很感兴趣 - 有没有办法检查我是否已经处于活动状态insert ... exec以避免实际错误?

所以我想要这样的东西:

....
if <check if I have outer insert into exec> = 0
    insert into <#some temporary table>
    exec <stored procedure>
Run Code Online (Sandbox Code Playgroud)

换句话说 -insert ... exec是可选的,拥有它很好,但如果有人试图用外部调用我的过程,我想跳过它insert ... exec

sql sql-server insert-into

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

在自引用表上编写递归SQL查询

我有一个数据库,其中包含一个名为Items的表,其中包含以下列:

  • ID - 主键,uniqueidentifier
  • 名称 - nvarchar(256)
  • ParentID - uniqueidentifier

name字段可用于构建项目的路径,方法是遍历每个ParentId,直到它等于'11111111-1111-1111-1111-111111111111',这是一个根项.

所以如果你有一个像行一样的表

ID                                   Name        ParentID
-------------------------------------------------------------------------------------
11111111-1111-1111-1111-111111111112 grandparent 11111111-1111-1111-1111-111111111111
22222222-2222-2222-2222-222222222222 parent      11111111-1111-1111-1111-111111111112
33333333-3333-3333-3333-333333333333 widget      22222222-2222-2222-2222-222222222222
Run Code Online (Sandbox Code Playgroud)

所以如果我在上面的例子中查找了一个id为'33333333-3333-3333-3333-333333333333'的项目,我想要的是路径

/grandparent/parent/widget 
Run Code Online (Sandbox Code Playgroud)

回.我试图写一个CTE,因为它看起来就像你通常会完成这样的事情 - 但由于我不做很多SQL,我无法弄清楚我哪里出错了.我已经看了一些例子,这和我似乎能够得到的一样 - 只返回子行.

declare @id uniqueidentifier
set @id = '10071886-A354-4BE6-B55C-E5DBCF633FE6'
;with ItemPath as (
    select a.[Id], a.[Name], a.ParentID 
        from Items a
            where Id = @id

    union all

    select parent.[Id], parent.[Name], parent.ParentID 
        from Items parent 
            inner join ItemPath as a
                on a.Id = parent.id
                    where parent.ParentId = a.[Id]
)
select * from …
Run Code Online (Sandbox Code Playgroud)

sql sql-server recursion common-table-expression

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

从时间改变列与时区到时间戳

我无法将end_datekey_request时区中调用的表中调用的列更改为timestampPostgres数据库.我尝试使用以下代码:

alter table key_request alter column end_date type timestamp with time zone using end_date::timestamp with time zone
Run Code Online (Sandbox Code Playgroud)

我一直收到以下错误:

ERROR:  cannot cast type time with time zone to timestamp with time zone
Run Code Online (Sandbox Code Playgroud)

知道如何调整此查询才能工作吗?

sql postgresql timestamp alter postgresql-9.2

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

将多行合并为一行

我正在尝试不同的JOIN查询,但我没有得到我正在寻找的结果.

我有两张桌子:

Table 1: **StockItemShort**    

ItemID  | Code          | Name    
 432724 | CK002-16-09   | Green Daisy Pearl Earrings
 432759 | CK002-16-149  | Emerald Crystal Centre Daisy Earrings  

Table 2: **StockItemCatSearchValueShort**

ItemID |    SearchValueID
432724 |    388839
432724 |    389061
432724 |    390269
432724 |    389214
432759 |    388839
432759 |    389051
432759 |    390269
432759 |    389214
Run Code Online (Sandbox Code Playgroud)

我无法得到我正在寻找的结果.

我想获得以下结果:

ItemID  | Code  | Name  | SearchValueID | SearchValueID | SearchValueID | SearchValueID 
432724  | CK002-16-09   | Green Daisy Pearl Earrings …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2012

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

Django:选择具有最大时间戳的值或连接到同一个表

我有一个简单的Django模型

class Server(models.Model):
    name = models.CharField(max_length=120)

class ServerPropertie(models.Model):
    name = models.CharField(max_length=120)
    value = models.CharField(max_length=120)
    timestamp = models.DateTimeField()
    server = models.ForeignKey(Server)
Run Code Online (Sandbox Code Playgroud)

我想将get_properties方法添加到Server模型,该模型将返回当前服务器的所有最后一个属性.我的意思是它应该返回当前服务器的所有属性名称的名称和值,并且每个uniq属性名称应该具有值,该行具有最大时间戳.

我可以在原始的硬编码原始SQL(我使用postgres)中做到这一点:

SELECT t1.name, t1.value FROM environments_serverpropertie t1
JOIN (SELECT max("timestamp") "timestamp", name 
      FROM environments_serverpropertie
      group by name) t2 on t1.name = t2.name and t1.timestamp = t2.timestamp;
Run Code Online (Sandbox Code Playgroud)

或者在python中,但我相信存在pythonic解决方案.请你帮助我好吗.

python sql django postgresql

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

如何确定更新触发器中的更新字段

更新:使用Update_Columns()不是这个问题的答案,因为字段可能会按触发器的顺序更改(Update_Columns取决于列顺序).

更新2:我已经知道Deleted和Inserted表保存了数据.问题是如何确定已更改的内容而无需对字段名称进行硬编码,因为字段名称可能会更改,或者可能会添加字段.

可以说我有一个有三个字段的表.

该行已存在,现在用户更新字段1和2.

如何在更新触发器中确定更新字段的内容以及前后值的位置?

我想将这些记录到日志表中.如果有两个字段更新,则应在历史记录表中生成两行.

Table
Id  intField1  charField2  dateField3
7           3  Fred        1995-03-05

Updated To

7           3  Freddy      1995-05-06

History Table
_____________

Id  IdOfRowThatWasUpdated    BeforeValue    AfterValue (as string)
1                       7    Fred           Freddy
2                       7    1995-03-05     1995-05-06
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Deleted表来获取旧值,并使用inserted表来获取新值.然而,问题是如何动态地这样做.换句话说,实际的表有50列,我不想将50个字段硬编码到SQL语句中,如果字段发生变化,也不想担心保持SQL同步表格变化.

格雷格

sql sql-server sql-server-2008-r2

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