小编Dra*_*mmy的帖子

SQL Server中最常用的方法是将多个数据更改压缩为值之前和之后

我有一个SQL Server数据库,其中包含一些显示第三方数据库(OpenEdge)更改的审计记录.我无法控制审计数据的结构,也无法控制第三方数据库审计数据更改的方式.所以我留下了,例如,以下数据......

源数据集

如果您按照前五行进行操作,则可以看到它们都属于TransId 1532102(表示数据库事务),其中TransSeq表示单个事务中的数据库操作.

在列前缀中New,审核更改是可见的.如果值为NULL,则不会对该字段进行任何更改.

查看数据,您可以看到TransId = 1532102,其中PrimaryIdentifier从2更改为-2(第1行),然后从-2更改为3(第3行),然后从3更改为4(第4行),最后从4更改为4到5(第5行).您可能还注意到,当PrimaryIdentifier从3更改为4时,SecondaryIdentifier从'abcd'更改为'efgh'(第4行).因此,这些多个更改实际上只发生在单个源记录上.因此,考虑到这一点,第1,3,4和5行都可以压缩成一行(见下文)

在此输入图像描述

最终TransId 1532102只有两项记录变化.

在此输入图像描述

我需要将这些更改转换为目标数据库上的单个UPDATE语句.为了做到这一点,我需要确保我有一条记录显示前后值.

因此,鉴于此处提供的源数据,我需要生成以下数据集.

必需的数据集

我可以使用哪些查询结构来实现此目的?我在考虑递归CTE或者使用Hierarchical结构?最终我需要这个以尽可能好的表现,所以我想在这里提出问题,以防我没有考虑所有可能的方法.

欢迎思考,这是一个示例数据的脚本

DECLARE @TestTable TABLE (SyncId INT, TransId INT, TransSeq INT, PrimaryIdentifier INT, SecondaryIdentifier NCHAR(4), NewPrimaryIdentifier INT, NewSecondaryIdentifier NCHAR(4), NewLevel INT, NewValue NVARCHAR(20))
INSERT  @TestTable
        SELECT 128, 1532102, 0,  2, 'abcd',   -2,   NULL, NULL, 'test data'
UNION   SELECT 128, 1532102, 1,  3, 'abcd',    2,   NULL, NULL, NULL
UNION   SELECT 128, 1532102, 2, -2, 'abcd',    3,   NULL, NULL, NULL
UNION   SELECT 128, 1532102, 3,  3, 'abcd',    4, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

7
推荐指数
1
解决办法
256
查看次数

益智:将数字均匀分布在群组中

这真的是一个难题.它之前可能已被问过,但我找不到任何东西,所以我想我会分享这个问题.

我正在尝试在应用程序中实现某种负载平衡,并将问题简化为我认为应该是一个简单的TSQL练习(该应用程序主要在SQL Server域(SQL Server 2008 R2)中).

基本上我有一个有两个整数的表; 唯一的,顺序的Id和非唯一的值.该表可以包含任意数量的记录,我想生成一个数据表,其中前n个最大值被分成单独的"分组",然后第二组n个最大值被分成单独的"分组".

我在下面有一份初稿,但我相信它可以改进......

DECLARE @GroupCount INT = 5

-- Set up the test data
DECLARE @test TABLE (Id INT IDENTITY(1, 1), Value INT)
INSERT  @Test (Value)
VALUES  (100), (456), (121), (402), (253), (872), (765), (6529), (1029), (342), (98), (1), (0), (4), (46), (23), (456), (416), (2323), (4579)


--Order by Value descending
;WITH cte AS
(
    SELECT  *
            ,ROW_NUMBER() OVER (ORDER BY Value DESC) RowNum
    FROM    @Test
)
--use modulus to split into grouping
, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008-r2

7
推荐指数
1
解决办法
254
查看次数

Linq to Objects:Distinct + Concatenation

我有一个对象列表,其中9个属性中的8个频繁重复,最后一个属性在整个过程中不同.

使用C#和LINQ对象我想检索前8个属性的(分组)不同列表,其中第9个属性在整个组中连接...

public class MyClass
{
    public int property1 {get;set;}
    public string property2 {get;set;}
    public string property3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我可能有一个列表,如:

var list1 = new List<myClass>
        {
            new myClass {property1 = 1, property2 = "foo", property3 = "This"},
            new myClass {property1 = 1, property2 = "foo", property3 = "is"},
            new myClass {property1 = 1, property2 = "foo", property3 = "a"},
            new myClass {property1 = 1, property2 = "foo", property3 = "test"},
            new myClass {property1 = 1, property2 = "foo", property3 = …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects

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

servicestack 在 uri 中传递正斜杠

我正在使用 servicestack 构建一个 Web API,通过网络提供一些旧数据。不幸的是,数据模式并不特别适合 ServiceStack.Ormlite 的标准使用。例如,没有主键,并且在一个表上(非唯一)键实际上可以包含任何字符。在我的示例数据库中,键内有“/”字符。

因此,当使用此路由“/api/objects/{objectCode}”从 Web api 请求资源时,如果所需的 objectCode 为 1/1,则路由应为“/api/objects/1/1”,但这会生成一个页面未发现异常。当我在以下路由“/api/objects/{objectCode}/subObjects”上请求资源时该怎么办

  1. 有谁知道我应该如何解决这个问题?我应该围绕这个问题进行设计还是我可以做些什么来允许它发生?

  2. 另外,理想情况下,我希望能够传递这些 objectCode 的数组,但我不能保证,objectCode 值中不会有 a ,因此分隔字符会出现在资源代码中,从而出现在 ServiceStack 的分隔符解析中,不是吗?

我已经搜索过线索,但只发现人们询问查询字符串中的编码而不是 URI 本身。

uri escaping servicestack

0
推荐指数
1
解决办法
893
查看次数