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 tablet\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');