标签

SqlServer

猿来如此 2017-09-20

关于SqlServer中的NOLOCK

在我们系统的sql查询代码中,经常可以看到select之后会加一个NOLOCK的关键字,但是至于这个关键字是什么意思,问了下大家一般也就是说“禁用读写锁,可以提升查询性能”,但是真正深层次的原因却不清楚,查询了下相关资料然后整理了下分享给大家。

nolock是什么

nolock是 SQL Server 的一个关键字,这类关键字官方将其称之为 Hints。 Hints 的设计目的是为了能够让 SQL 语句在运行时,动态修改查询优化器的行为。 在语法上,Hints 以WITH开头。除了WITH(nolock), 还有TABLOCK/INDEX/ROWLOCK等常见的 Hints。 MSDN文档上的解释是这样的:

nolock的作用等同于READUNCOMMITTED

READUNCOMMITTED这是一种 RDBMS 隔离级别。 使用nolock这个关键词,可以将当前查询语句隔离级别调整为READ UNCOMMITTED。
下面来介绍下什么是隔离级别:

隔离级别

隔离级别主要有四种,其隔离程度由高到低是:
- 可序列化(Serializable) - 可重复读(Repeatable reads) - 提交读(Read committed) - 未提交读(Read uncommitted)

隔离级别主要解决的问题是加一个针对数据资源的锁,从而保证数据操作过程中的一致性。...

CSharp 2017-05-04

SqlServer使用表值参数批量插入更新数据

首先,创建自定义表类型:

CREATE TYPE BulkUdt AS TABLE(
Id int,
Name NVARCHAR(10)
)

然后是使用方式:

private static System.Data.DataTable GetTestTable()
{
    System.Data.DataTable dt = new System.Data.DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");
    for (int i = 0; i < 1000; i++)
    {
        var row = dt.NewRow();
        row["Id"] = i.ToString();
        row["Name"] = $"Name{i}";
        dt.Rows.Add(row);
    }
    return dt;
}

static void InsertTest()
{
    var dt = GetTestTable();
    SqlConnection sqlConn = new SqlConnection(
        ConfigurationManager.ConnectionStrings["Conn...
发现更多