【问题标题】:SQL Server - Stop user from making secondary account without a main accountSQL Server - 阻止用户在没有主帐户的情况下创建辅助帐户
【发布时间】:2022-01-02 15:49:51
【问题描述】:

我一直试图让我的代码工作,但它没有按预期运行,基本上@NAME 是用户在尝试创建新用户时输入的内容,@Tmpname 是没有任何数字的名称,如有原始帐户(John Smith)和辅助帐户(John Smith 2、John Smith 3、John Smith 4 等)。

如果没有原始用户并且他们正在处理创建辅助帐户,我希望 @Name IS NULL。该脚本仅在 @Name 中包含数字时才会触发,因此创建的原始帐户不会受到此搜索的影响

预期示例,

用户尝试创建“John Smith 2”,没有“John Smith”,因此它为空 @Name(并且脚本出错)

目前,即使有现有用户,它也会使@Name 无效,我不想要这个,

当前功能示例 用户尝试创建“John Smith 2”,有一个“John Smith”,它使 @Name 为空并且脚本出错

SELECT @NAME = --If user is attempting to make a secondary account without an original account
CASE
    WHEN @TmpName = name
THEN @Name
ELSE NULL
END
FROM t_employee
WHERE @NAME LIKE '%[0-9]%'

这是我第一次在这个平台上,所以如果您需要更多信息,请告诉我,错误肯定在这段代码中,而不是在我的脚本中的其他地方,因为注释掉它可以解决任何错误。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读question guide,此类问题将受益于Minimal, Reproducible Example 的示例数据和所需结果。
  • 您是否在这里对名称做出了巨大的假设?请注意,您的查询可以选择许多行,但您可以从中分配一个标量值。这是一个坏习惯的好例子。 If you expect and require a single value, use the form set @x = (select ...); which will throw an error when multiple rows are selected.
  • 而且顺便说一句,名称并不是唯一的——即使在相对较小的人群中也是如此。我在一个有大约 150 人的地方工作,其中 2 人同名(在一个拥有数万名员工的组织中)。非常小心您的假设以及您如何设计看起来应该是安全且可能非常敏感 (PII) 的东西。
  • @SMor 感谢您的建议,我对 SQL 还是很陌生。 :)
  • @SMor 您有什么建议可以解决唯一名称问题?

标签: sql sql-server database tsql


【解决方案1】:

如果我理解了你想要做什么,这样的事情应该可以工作:

If @Name Like '%[0-9]%' And Not Exists
(
    SELECT 1
    FROM t_employee
    WHERE name = @TmpName
)
BEGIN
    SET @Name = NULL;
END;

【讨论】:

  • 这似乎行得通,谢谢理查德!
猜你喜欢
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2021-03-02
  • 2015-01-18
相关资源
最近更新 更多