Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 存储过程中不返回值_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql server 存储过程中不返回值

Sql server 存储过程中不返回值,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我在下面有这个问题 ALTER PROCEDURE sp_myTest @emp_ids nvarchar(max) AS BEGIN SET NOCOUNT ON; SELECT Count(*) FROM emp_service t INNER JOIN t_emp e ON t.emp_id = e.emp_id WHERE (t.emp_id IN (Select *

我在下面有这个问题

ALTER PROCEDURE sp_myTest
    @emp_ids nvarchar(max)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT
        Count(*) 
    FROM
        emp_service t
    INNER JOIN 
        t_emp e ON t.emp_id = e.emp_id
    WHERE 
        (t.emp_id IN (Select * FROM dbo.Split(@emp_ids, ',')) OR @emp_ids = '' OR @emp_ids IS NULL)
        AND t.status IN ('A', 'R', 'S')
    GROUP BY 
        t.emp_id
END
在上面的存储过程中,我有两个表:Employee Service(
emp\u Service
)和Employee table
t\u emp

我在这里要做的是了解员工服务的状态。假设“A”处于活动状态,“R”被删除,“s”被挂起。在这个查询中,我想找到与emp_id对应的服务数量

例如:我的emp_id是“15000”,我有三个服务,它们的状态是“A”、“S”、“A”。在这种情况下,预期结果应该返回“3”(我只使用select语句运行它,它返回正确的结果)

此查询返回“3”,这是正确的结果


但是,当我尝试执行存储过程时,它返回“0”。我不知道为什么会有不同的结果。我们将不胜感激

你想做的就像是用刀子砍一棵树。可能,但工具错误

更好的是一种功能。存储过程意味着要做一些事情,并且可能会有结果。函数的作用是传递一个类型化的结果,而你甚至不允许在其中做任何事情

尽管有很多SPs除了读取数据之外什么都不做的例子,但这是一个需要改掉的坏习惯

试着这样做:

CREATE FUNCTION dbo.MyTest
(
    @emp_ids nvarchar(max)
)
RETURNS INT
AS
BEGIN
    RETURN
    (
        Select Count(*) 
        From emp_service t
        INNER JOIN t_emp e
        ON t.emp_id = e.emp_id
        WHERE 
            (t.emp_id IN (Select * FROM dbo.Split(@emp_ids, ',')) OR @emp_ids = '' OR @emp_ids IS NULL)
            and t.status in ('A', 'R', 'S')
            GROUP BY t.emp_id
    );
END
你管这叫什么

SELECT dbo.MyTest('SomeEmpId');

这可能是因为存储过程的值设置不正确,您可以使用硬代码值检查并编辑存储过程中的查询,然后尝试结果。对此我不确定,但我认为这是ALTER procedure sp_myTest(@emp_ids nvarchar(max))AS@Drag,显示
exec
code。可能是
exec
语句中的参数格式不正确。确保使用
NVARCHAR(MAX)
参数调用该过程,其中的值用逗号分隔。不要使用
sp
前缀!这是保留的,可能会在以后引起问题……这并不能回答提出的问题,即“为什么会产生不同的结果?”@corky_bantam OK。。。如果你问一位专家(这里是一位伐木工人),为什么这棵树还站着,尽管你用刀工作了几个小时,我希望他会告诉你使用锯子。。。如果没有实际的执行调用,就不可能有真正的答案。这是SQLGeorge提出的问题,但OP还没有回答。。。
SELECT dbo.MyTest('SomeEmpId');