以下查询是为SQL Server编写的,如果我硬编码@TempStaff
,那么它工作正常,@Tempstaff
中有一个值,但像这样的代码不会返回任何内容。
查询是收集员工及以下级别的所有员工:
DECLARE
@TempStaff varchar(10),
@staff_Full_name varchar (30)
BEGIN
SELECT @staff_Full_name = 'Doe, John'
DECLARE @staffNameTable TABLE
(
StaffID char(7),
StaffName Varchar(50)
)
INSERT INTO @staffNameTable
SELECT * FROM dbo.fn_Staff_Full_Name()
SELECT @TempStaff = (
SELECT StaffId
FROM @staffNameTable st
WHERE st.StaffName = @staff_Full_name
)
END
DECLARE @staff TABLE
(
StaffId char(10)
)
INSERT INTO @staff (StaffId)
SELECT * FROM dbo.fn_Supervisor_List(10, @TempStaff)`
功能是
ALTER FUNCTION [dbo].[fn_Supervisor_List]
(
@looptill Int,
@StaffId varchar(10)
)
RETURNS
@staff TABLE
(
StaffId char(10)
)
AS
BEGIN
DECLARE
@loop int
INSERT INTO @staff
SELECT s.StaffId
FROM Staff s with (nolock)
WHERE s.StaffId like @StaffId
BEGIN
SELECT @loop = 0
WHILE @loop < @looptill
BEGIN
INSERT INTO @staff
SELECT s.StaffId
FROM dbo.StaffSupervisors s with (nolock)
--WHERE s.super_id in (
WHERE s.SupervisorId in (
SELECT s2.StaffId
FROM @Staff s2
)
AND s.StaffId not in (
SELECT s2.StaffId
FROM @Staff s2
)
SELECT @loop = @loop + 1
END
END
RETURN
END
当我在填充后运行SELECT @TempStaff时 - 我得到了我期望的变量,但是当我在结束时运行SELECT * FROM @Staff时@Staff是空的。
答案 0 :(得分:0)
好的,我发现了问题,我已经将Value @TempStaff声明为Varchar但是当我将其更改为INT时,它工作正常。谢谢大家发布的建议。我一定会关注CTE的。