SQL Server用户定义函数什么都不返回

时间:2012-10-08 21:00:56

标签: sql sql-server

以下查询是为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是空的。

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题,我已经将Value @TempStaff声明为Varchar但是当我将其更改为INT时,它工作正常。谢谢大家发布的建议。我一定会关注CTE的。