无法使用存储过程获得确切的结果,因为它返回带有增量的值[关闭]

Posted

技术标签:

【中文标题】无法使用存储过程获得确切的结果,因为它返回带有增量的值[关闭]【英文标题】:Unable to get the exact result using stored procedure as it is returning the values with the incrementation [closed] 【发布时间】:2020-08-19 12:07:16 【问题描述】:
ALTER PROCEDURE Searching
    (@EmployeeName varchar(50))    
AS
BEGIN
    SELECT
        EmployeeDetails.EmployeeId, EmployeeName, Mobile, Email, 
        Gender, Married, JoiningDate, DOB, ReportingManager, 
        ISActive, ISDelete, EmployeeRoles.RoleId, 
        employeeDepartment.Department
    FROM
        EmployeeDetails, EmployeeRoles, employeeDepartment
    WHERE
        EmployeeDetails.EmployeeName LIKE '%' + @EmployeeName + '%'
END

这是我的存储过程,但是当我执行它时,我得到的结果是:

exec Searching 'Rizwan'

所以请帮我解决这个问题

【问题讨论】:

那么你期待什么结果? @DaleK 它正在通过增加roleid 列来检索值,但是因为该员工只被赋予了一个roleId,并且它将roleID 增加到3 并检索记录总数作为记录总数.. 因为我接受这个只返回表中存在的值,其中单列或多列作为 EmployeeName 这可能是因为您的联接已损坏。首先我建议不要使用旧式连接,其次你需要为每个连接添加一个连接条件。 @DaleK 你能帮我解决这个问题吗 注意:您使用 ado.net 和 c# 的事实在这里无关紧要;问题纯粹是查询本身 【参考方案1】:

现在您有不受限制的连接。如果没有看到架构,我无法告诉您您的联接应该是什么应该,但我们可以推测大致如下:

Alter procedure Searching
(
    @EmployeeName varchar(50)
)    
as 
begin    
    select EmployeeDetails.EmployeeId, EmployeeName, Mobile, Email, Gender, Married, JoiningDate, DOB, ReportingManager, ISActive, ISDelete, e.RoleId, ed.Department
    from EmployeeDetails e
    inner join EmployeeRoles er on er.Id = e.RoleId
    inner join employeeDepartment ed on ed.Id = e.DepartmentId
    where e.EmployeeName LIKE '%' + @EmployeeName + '%'
end

另外,作为一个广泛的不相关提示:使用varchar 来表示人名通常是一个坏主意 - 将其限制为 50 个字符也是如此。名字很重要;我建议在列和参数中使它更像nvarchar(200)

【讨论】:

以上是关于无法使用存储过程获得确切的结果,因为它返回带有增量的值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

无法获得 Google fit 应用上显示的确切步骤

MybatisMyBatis调用带有返回结果output参数的存储过程上与ibatis的区别

带有枢轴的存储过程不会返回结果结构而是返回零值

使用带有 cat 和多个进程管道的 popen 未获得 grep 结果

如何使用 JDBC 调用带有命名参数的 Sybase 存储过程