小编Dib*_*Dib的帖子

如何将表中的最大行数限制为 1

我的 SQL Server 数据库中有一个配置表,该表应该只有一行。为了帮助未来的开发人员理解这一点,我想防止添加多于一行的数据。我选择为此使用触发器,如下所示......

ALTER TRIGGER OnlyOneConfigRow
    ON [dbo].[Configuration]
    INSTEAD OF INSERT
AS
BEGIN
    DECLARE @HasZeroRows BIT;
    SELECT  @HasZeroRows = CASE
        WHEN COUNT (Id) = 0 THEN 1
        ELSE 0
    END
    FROM
        [dbo].[Configuration];

    IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0
    BEGIN
        RAISERROR ('You should not add more than one row into the config table. ', 16, 1)    
    END
END
Run Code Online (Sandbox Code Playgroud)

这不会引发错误,但不允许第一行进入。

还有比这更有效/更自我解释的方法可以将可以插入表中的行数限制为 1 吗?我是否缺少任何内置的 SQL Server 功能?

trigger sql-server insert limits row

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

在 SQL Server 中,是否在插入的默认约束之前或之后应用了检查约束?

根据标题:在 SQL Server 中,是否在插入的默认约束之前或之后应用了检查约束?

所以采用下表(为简洁起见省略了不必要的列)......

CREATE TABLE [dbo].[Customer](
    [CountryCode] [varchar](5) NULL CONSTRAINT [CK_Customer_DefaultCountryCode]  DEFAULT ([app].[GetUnknownCountryIsoCountryCode]()),
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

...还有以下检查约束...

ALTER TABLE [admin].[Customer]  WITH CHECK 
    ADD  CONSTRAINT [CK_CustomerHasCountryWhenIntercompanyBusinessModel] 
    CHECK  (
        ([app].[BusinessModelMustHaveCountry]([BusinessModelId]) = (1) AND [app].[CheckCountryCodeExists]([CountryCode]) = (1) OR 
        [app].[BusinessModelMustHaveCountry]([BusinessModelId]) <> (1))
    )
GO
Run Code Online (Sandbox Code Playgroud)

...是否会应用默认约束并在应用检查约束之前填充默认值?

sql-server constraint default-value check-constraints

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

使用视图连接表或存储过程以获得更好的执行计划?

首先让我声明我是 C# 开发人员,而不是 SQL Server DBA,所以请原谅我对 SQL Server 数据库查询执行计划的无知。

我想知道的是对于使用主键和外键从两个或多个表中提取结果以引用它们的存储过程,是否更好的做法是:

  1. 有一个视图,视图执行连接并包含两个(或多个)表中所有相应记录的扁平化数据,并让存储过程从该视图中进行选择和过滤
  2. 存储过程进行连接和过滤

我问是因为在 C# 世界中,我们会将关注点分开,因此一个对象或函数将负责连接(在本例中为视图),另一个对象或函数将负责过滤(在本例中为存储过程) )。

  • 上面哪个选项会表现得更好?
  • 上面的哪个选项被认为是最佳实践?

在 C# 中,关注点分离通常被认为比性能更重要,直到证明性能已成为代码的严重问题。但是我不知道SQL世界里的东西堆起来了!

performance sql-server stored-procedures execution-plan view query-performance

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