【问题标题】:SQL query for this case?这种情况下的 SQL 查询?
【发布时间】:2010-11-20 07:52:46
【问题描述】:

有一个 Employee 表,其中包含employee_id 和employee_name

我想在这张表中插入“james”。
如果 Employee 表已经有一个“james”记录,我希望返回他的employee_id
如果表有多个“james”记录(重复),则不执行任何操作并跳过
如果没有“james”,我想插入“james”并返回新的employee_id

伙计们,我如何为此编写查询。

更新:我的另一个question 的答案解决了这个问题。谢谢大家的指导,

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    您需要编写一个存储过程来执行此操作。你对他们熟悉吗?或者,您可以从您的服务器多次查询数据库。

    【讨论】:

    • 感谢您的快速回复。实际上整个事情都在一个存储过程中......我可以在其中做一些“如果”。但我想可能有一个 sql 语句来做重复检查。
    • 我会继续使用 ifs。我无法想出一个符合您希望的行为方式的查询。
    【解决方案2】:

    我认为MERGE 声明是您正在寻找的。

    【讨论】:

    • 也许可以,但是如何?为什么不提供解决问题的答案?
    • merge 是一个不错的选择 - 但 OP 有一些特定要求,将问题强制处理为程序。一旦进入该过程,与一些更传统的 if then else 类型逻辑相比,合并并没有真正购买太多。
    【解决方案3】:

    如果允许使用@@Rowcount函数:

    声明@EmployeeId int 选择前 2 个 @EmployeeId = employee_id 来自@Employee WHERE employee_name = '詹姆斯' 如果 @@Rowcount > 1 开始 PRINT '找到许多匹配的行' 返回; 结尾 如果@EmployeeId 为空 - 插入 ... 别的 -- 返回@EmployeeId

    【讨论】:

    • Ivan,你的意思是在测试中有“IS NOT NULL”吗?如果值不为null,那么select语句找到了一些数据,对吗?
    猜你喜欢
    • 2013-04-25
    • 2011-01-09
    • 2011-10-12
    • 1970-01-01
    • 2014-06-26
    • 2021-10-28
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多