gpt4 book ai didi

sql-server - T-SQL 疯狂函数结果

转载 作者:行者123 更新时间:2023-12-03 14:24:48 24 4
gpt4 key购买 nike

我有这个功能:

CREATE FUNCTION CheckAkvNames (@Name VARCHAR(20))
RETURNS INT
AS
BEGIN
DECLARE @NoTexist int = 1

SELECT
@NoTexist = CASE WHEN COUNT(*) > 0 THEN 0 ELSE 1 END
FROM
[dbo].[Names]
WHERE
[Name] = @Name

RETURN @NoTexist
END
GO

ALTER TABLE [dbo].[Names]
ADD CONSTRAINT chkNames CHECK(dbo.CheckAkvNames([Name]) = 1);
GO

问题是,当我在空表上运行它时,我无法插入...

所以这个改变有效:
CASE WHEN (COUNT(*) - 1) > 0 THEN 0 ELSE 1 END 

为什么?有任何想法吗?

编辑:
目的是仅插入不在表中的名称。我知道使用 key 会更好,问题的重点不是找到更好的解决方案,而是为什么这个解决方案不起作用。

最佳答案

您添加的约束 到表实际上意味着你不能插入 任何名字在表中,因为对于表中插入的任何值,函数都应该返回 1。这是不可能的,因为如果插入了名称,则会违反约束。
这就是为什么count(*) - 1有效:如果已经插入了一个名称并且您尝试插入相同的名称 然后 将违反约束。

关于sql-server - T-SQL 疯狂函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com