【发布时间】:2014-11-29 17:21:46
【问题描述】:
如何计算不同行的数量减去对这些相同不同行的连接?
如果用户对提交的行没有权限,我需要在触发器之后引发错误。我可以在两个语句中做到这一点,但这似乎效率低下。
DECLARE @AccessibleCount INT =
(
SELECT
COUNT(DISTINCT i.[ParentId])
FROM
inserted i
INNER JOIN [SuperSecret].[Parent] AS p ON
p.[Id] = i.[ParentId] AND
p.[LockedBy] = @UserId
);
DECLARE @ActualCount INT = (SELECT COUNT(DISTINCT [ParentId]) FROM inserted);
IF (@AccessibleCount <> @ActualCount)
BEGIN
RAISERROR(...);
ROLLBACK TRANSACTION;
END
出于性能考虑,我似乎应该对不同的inserted.ParentId 使用子查询来计算这两个计数。我尝试了以下方法,但结果是“无效的对象名称'i'。”
DECLARE @ActualMinusAccessible INT =
(
SELECT
COUNT(*)
-
(
SELECT
COUNT(*)
FROM
i
INNER JOIN [SuperSecret].[Parent] AS p ON
p.[Id] = i.[ParentId] AND
p.[LockedBy] = @UserId
)
FROM
(
SELECT DISTINCT [ParentId] FROM inserted
) AS i
);
IF (@ActualMinusAccessible <> 0)
BEGIN
RAISERROR (...);
ROLLBACK TRANSACTION;
END
【问题讨论】:
标签: sql sql-server join sql-server-2008-r2 distinct