小编Joh*_*nyM的帖子

NOLOCK会导致DISTINCT失败吗?

免责声明:这不是关于NOLOCK问题的一般性问题(因此不是NOLOCK(Sql Server提示)错误做法的重复吗?); 这是一个特定的问题,关于NOLOCK和DISTINCT如何交互以试图更好地理解SQL Server的内部工作.

虽然看起来很奇怪,但在我看来,NOLOCK可能会导致DISTINCT在某种情况下失败.这是一个例子:

INSERT INTO TableA (ID)
SELECT DISTINCT ID
FROM TableB WITH (NOLOCK)
Run Code Online (Sandbox Code Playgroud)

以上示例偶尔会产生PK违规.以下是其他相关事实:

  • TableA的PK是ID
  • TableB的PK是ID
  • 启动时,TableA为空.
  • 在此期间,没有其他任何内容写入TableA.
  • 在上面运行时,TableB会发生更新.

我的工作理论是:1)TableB上的更新与NOLOCK的使用相结合导致重复数据,2)优化器依赖于TableA在同一列上具有PK的事实,我们是DISTINCTing,因此不会t主动对正在返回的行执行DISTINCT操作,它只是假设行已经是不同的.

谁能证实这一点?如果是这样,这是设计,还是SQL Server中的错误?

我原本以为即使有脏读也有重复行的可能性,DISTINCT将是清理重复项的保证,但我看到的证据似乎表明不是这样.

在SQL Server 2008R2上看到此错误.

sql-server

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

如何将滚动条向上移动一行?(在C#RichTextBox中)

对于我的C#RichTextBox,我想以编程方式执行与单击垂直滚动条顶部的向上箭头相同的操作,这会将RichTextBox显示向上移动一行.这是什么代码?谢谢!

c# scrollbar richtextbox

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

如何找到字符串格式错误的位置XML(在C#中)?

我正在编写一个轻量级的XML编辑器,如果用户的输入格式不正确,我想向用户指出问题出在哪里,或者至少在第一个问题出现的地方.有谁知道现有的算法吗?如果看代码有帮助,如果我可以填写FindIndexOfInvalidXml方法(或类似的东西),这将回答我的问题.

using System;

namespace TempConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "<?xml version=\"1.0\"?><tag1><tag2>Some text.</taagg2></tag1>";
            int index = FindIndexOfInvalidXml(text);
            Console.WriteLine(index);
        }

        private static int FindIndexOfInvalidXml(string theString)
        {
            int index = -1;

            //Some logic

            return index;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# xml algorithm

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

复制文件时如何防止此System.IO.IOException?

当我运行以下代码来测试复制目录时,我在调用fileInfo.CopyTo方法时得到一个System.IO.IOException.错误消息是:"进程无法访问文件'C:\ CopyDirectoryTest1\temp.txt',因为它正被另一个进程使用."

似乎在file1("C:\ CopyDirectoryTest1\temp.txt")上有一个锁,它在错误发生的地方创建了几行,但我不知道如何释放它.有任何想法吗?

using System;
using System.IO;

namespace TempConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string folder1 = @"C:\CopyDirectoryTest1";
            string folder2 = @"C:\CopyDirectoryTest2";
            string file1 = Path.Combine(folder1, "temp.txt");

            if (Directory.Exists(folder1))
                Directory.Delete(folder1, true);
            if (Directory.Exists(folder2))
                Directory.Delete(folder2, true);

            Directory.CreateDirectory(folder1);
            Directory.CreateDirectory(folder2);
            File.Create(file1);

            DirectoryInfo folder1Info = new DirectoryInfo(folder1);
            DirectoryInfo folder2Info = new DirectoryInfo(folder2);

            foreach (FileInfo fileInfo in folder1Info.GetFiles())
            {
                string fileName = fileInfo.Name;
                string targetFilePath = Path.Combine(folder2Info.FullName, fileName);
                fileInfo.CopyTo(targetFilePath, true);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# io ioexception

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

标签 统计

c# ×3

algorithm ×1

io ×1

ioexception ×1

richtextbox ×1

scrollbar ×1

sql-server ×1

xml ×1