小编cm0*_*007的帖子

在 SQL Server 中,读锁是如何工作的?

假设我有以下长时间运行的查询

UPDATE [Table1]
SET [Col1] = 'some value'
WHERE [Col2] -- some clause which selects thousands of rows
Run Code Online (Sandbox Code Playgroud)

并假设在上述查询运行时执行以下查询

SELECT *
FROM [Table1]
Run Code Online (Sandbox Code Playgroud)

第一个查询是否阻止第二个查询运行,直到第一个查询完成?如果是这样,第一个查询会阻止第二个查询在所有行上运行还是仅在 WHERE 子句中涉及的行上运行?

编辑:

假设第二个查询是

SELECT [Col1], [Col2]
FROM [Table1]
WHERE [Col2] -- some clause whose matching elements overlap those from
             -- the clause in the first query and which has additional matching elements
Run Code Online (Sandbox Code Playgroud)

sql-server locking

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

如何选择多个 COUNT(*) 列,每个 GROUP BY 都有不同的 WHERE 子句?

我有以下架构:

CREATE TABLE Person (
  PersonId int PRIMARY KEY
)

CREATE TABLE Action (
  ActionId int PRIMARY KEY,
  PersonId int NOT NULL FOREIGN KEY REFERENCES Person(PersonId),
  ActionTime datetime NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

以及以下数据:

INSERT INTO Person (PersonId) VALUES
(1),
(2),
(3),
(4)

INSERT INTO Action (ActionId, PersonId, ActionTime) VALUES
(1, 1, '2014-02-01'),
(2, 1, '2014-02-02'),
(3, 2, '2014-02-02'),
(4, 3, '2014-03-05')
Run Code Online (Sandbox Code Playgroud)

我想运行一个查询,显示每个人在每个月的 15 日之间执行的操作数。例如,我正在尝试以下操作:

SELECT
    Person.PersonId,
    COALESCE(GroupA_Actions_Made, 0) AS GroupA_Actions_Made,
    COALESCE(GroupB_Actions_Made, 0) AS GroupB_Actions_Made
FROM
    Person
    RIGHT OUTER JOIN (
        SELECT …
Run Code Online (Sandbox Code Playgroud)

join sql-server-2008-r2 group-by

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

标签 统计

group-by ×1

join ×1

locking ×1

sql-server ×1

sql-server-2008-r2 ×1