小编Nov*_*zky的帖子

在多列上计算DISTINCT

有没有更好的方法来执行这样的查询:

SELECT COUNT(*) 
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
      FROM DocumentOutputItems) AS internalQuery
Run Code Online (Sandbox Code Playgroud)

我需要计算此表中不同项目的数量,但不同的是超过两列.

我的查询工作正常,但我想知道我是否只使用一个查询得到最终结果(不使用子查询)

sql t-sql sql-server

184
推荐指数
9
解决办法
41万
查看次数

T-SQL:在更新触发器中CLOSE/DEALLOCATE游标的正确方法

假设我有一个这样的触发器:

CREATE TRIGGER trigger1
   ON [dbo].[table1] 
   AFTER UPDATE
AS 
BEGIN               
    --declare some vars
    DECLARE @Col1 SMALLINT 
    DECLARE @Col1 TINYINT 

    --declare cursor        
    DECLARE Cursor1 CURSOR FOR 
    SELECT Col1, Col2 FROM INSERTED             

    --do the job
    OPEN Cursor1
    FETCH NEXT FROM Cursor1 INTO @Col1, @Col2

    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF ...something...
        BEGIN           
            EXEC myProc1 @param1 = @Col1, @Param2 = @Col2
        END             
        ELSE
        IF ...something else...
        BEGIN           
            EXEC myProc2 @param1 = @Col1, @Param2 = @Col2
        END     

        FETCH NEXT FROM Cursor1 INTO @Col1, @Col2 …
Run Code Online (Sandbox Code Playgroud)

t-sql database sql-server-2005 cursor

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

MVVM.在某些情况下,为View添加代码是否合理?

我有一个View,它有一个绑定到我的ViewModel(MVVM模式)的项目列表.

让我们说它看起来像那样:

<ScrollViewer Width="Auto" Height="Auto">
    <ItemsControl ItemsSource="{Binding Path=MessageLog}" 
                  Grid.IsSharedSizeScope="True"                     
                  ScrollViewer.CanContentScroll="True">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="150" SharedSizeGroup="FullName"/>
                        <ColumnDefinition Width="*" SharedSizeGroup="MessageLog"/>
                    </Grid.ColumnDefinitions>                                   
                    <StackPanel>
                        <TextBlock Text="{Binding Path=PostedBy.FullName}" />
                        <TextBlock Text="{Binding Path=DatePosted}" />
                    </StackPanel>
                    <TextBlock Grid.Column="1" Text="{Binding Path=MessageLog}"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

当用户向MessageLog添加内容(VM中有一个属性MessageLog)时,我想自动滚动到最新的项目.

换句话说,我只想在用户键入消息并点击输入时自动移动滚动条(就像Skype一样).

MessageLog上的绑定按预期工作,并在视图上更新项目.(我很高兴,我想这样离开)

我想知道如果使用MVVM模式方法,我仍然可以在View后面的代码文件中实现自动滚动吗?这似乎是相当逻辑的,因为滚动行为与VM无关,而ViewModel对View没有任何了解.这样对吗?我是正确的方式还是我错过了什么?

一般来说,在向View添加实现时有意义吗?

wpf binding mvvm

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

同一进程中线程之间的低延迟通信

控制台应用程序有3个线程:Main,T1,T2.目标是尽可能以最低延迟(μs)从主线程"发信号"T1,T2(并让它们做一些工作)

注意:

  • 请忽略抖动,GC等(我可以处理)
  • ElapsedLogger.WriteLine通话费用低于50ns(纳秒)

看看下面的代码:

样品1

class Program
{
    private static string msg = string.Empty;
    private static readonly CountdownEvent Countdown = new CountdownEvent(1);

    static void Main(string[] args)
    {
        while (true)
        {
            Countdown.Reset(1);
            var t1 = new Thread(Dowork) { Priority = ThreadPriority.Highest };
            var t2 = new Thread(Dowork) { Priority = ThreadPriority.Highest };
            t1.Start();
            t2.Start();

            Console.WriteLine("Type message and press [enter] to start");
            msg = Console.ReadLine();

            ElapsedLogger.WriteLine("Kick off!");
            Countdown.Signal();

            Thread.Sleep(250);
            ElapsedLogger.FlushToConsole();
        }
    }
    private static void Dowork()
    {
        string t = Thread.CurrentThread.ManagedThreadId.ToString(); …
Run Code Online (Sandbox Code Playgroud)

c# performance multithreading ipc low-latency

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

如何对心跳模式进行单元测试?

我正在编写一个客户端,每秒向服务器发送一个"心跳信号".客户端在后台线程中调用WCF服务以报告其活动.

如何对此进行单元测试?我是否需要等待几秒钟并检查是否多次调用了适当的方法?

它应该是某种情景测试吗?也许我不应该担心在整个客户的整个生命周期中不断调用服务?

我可以测试对WCF服务的单个调用,但它不测试"心跳模式".

我正在使用TDD方法.(C#,NUnit,Moq)

有什么建议或例子吗?

编辑:

我认为还不够清楚.

这是我所拥有的更简单的版本:

public class FeedService
{
   private Timer t;

   public FeedService()
   {
      t.Interval = 1000;
      t.Elapsed += TimerElapsed;
      t.Start();
   }

   private void TimerElapsed(object sender, ElapsedEventArgs e)
   {
      t.Stop();
      SendHeartbeat();
      t.Start();
   }
}
Run Code Online (Sandbox Code Playgroud)

......这是我的考验:

[Test]
public void Heartbeat_called_twice_after_2_seconds()
{
  var mockFeedService = new Mock<FeedService>();

  Thread.Sleep(2000);
  mockFeedService.Verify(x => x.SendHeartBeat(), Times.AtLeast(2));
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:
1)为什么我的测试总是失败?我做错了什么?
2)我应该测试一下吗?

.net c# nunit unit-testing

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

SQL Server:如何获取独占锁以防止竞争条件?

我有以下T-SQL代码:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION T1_Test

    /*This is a dummy table used for "locking" 
    and it doesn't contain any meaningful data.*/        
    UPDATE lockTable 
        SET ID = 1    
        WHERE ID = 1

    DECLARE @Count TINYINT 

    SELECT @Count = COUNT(*)
    FROM debugSP 

    WAITFOR DELAY '00:00:5';

    INSERT INTO debugSP 
        (DateCreated, ClientId, Result)
    SELECT 
        GETDATE(), @@SPID, @Count

COMMIT TRANSACTION T1_Test
Run Code Online (Sandbox Code Playgroud)

我正在使用标记为注释的"锁定"黑客获取独占锁.

注意:使用TABLOCKX或UPDLOCK提示将不起作用,因为我通过拆分语句并在中间添加WAITFOR命令以进行测试来破坏ATOMIC-ity.我不想要那样的东西:

INSERT INTO debugSP (DateCreated, ClientId, Result)
SELECT GETDATE(), @@SPID, COUNT(*) 
FROM debugSP
Run Code Online (Sandbox Code Playgroud)

这是运行两个同时会话(带锁表)后的正确结果

Id DateCreated           ClientId Result
-- ----------------------- …
Run Code Online (Sandbox Code Playgroud)

sql sql-server locking transactions isolation-level

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