代码之家  ›  专栏  ›  技术社区  ›  Mark

SQL;按合并列搜索

  •  2
  • Mark  · 技术社区  · 6 年前

    我正在创建一个存储过程。我有两栏,名字和姓氏。

    我可以使用以下语句合并它们:

    REPLACE(dbo.Employee.Forename, ' ', '') + ' ' + 
         REPLACE(dbo.Employee.Surname, ' ', '') AS EmployeeFullName
    

    如果我想在 EmployeeFullName ,我该怎么做?

    WHERE EmployeeFullName = @Name
    

    哪里 @name 将是存储过程的参数输入。

    CREATE PROCEDURE EmployeeSearch
        @Name VARCHAR(50)
    AS
        SELECT 
            dbo.Employee.Number, 
            REPLACE(dbo.Employee.Forename, ' ', '') + ' ' + REPLACE(dbo.Employee.Surname, ' ', '') AS EmployeeFullName, 
            DateOfBirth
        FROM 
            dbo.Employee
        WHERE        
            EmployeeFullName = @Name
    
        RETURN
    GO
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Md. Suman Kabir    6 年前

    您可以创建如下所示的存储过程:

    CREATE procedure EmployeeSearch 
    @name varchar(50)
    as
    begin
    
        SELECT Number, EmployeeFullName from (
            SELECT dbo.Employee.Number, REPLACE(dbo.Employee.Forename, ' ', '') + ' ' + REPLACE(dbo.Employee.Surname, ' ', '') AS EmployeeFullName
            FROM yourtable
        ) AS T WHERE EmployeeFullName = @Name
    
    end
    
        2
  •  1
  •   Dai    6 年前

    谓词( WHERE 子句)基于函数的结果通常是不可搜索的,这意味着数据库无法使用索引快速查找结果-因此,如果您有一个大表,那么它将运行缓慢。

    我建议在应用程序层中按名称搜索组件,而不是在SQL代码中。(顺便说一句,如果存储过程仅执行读取操作(即 SELECT ,和否 CREATE , ALTER , UPDATE , INSERT DELETE 操作),然后应该使用表值函数而不是存储过程。

    i、 e.每个名称组件都有一个参数。