Sql server 从函数调用主存储过程时,会在DataTable中给出子过程结果

Sql server 从函数调用主存储过程时,会在DataTable中给出子过程结果,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个sql存储过程,它调用另一个sql存储过程。在sql server中执行时,我工作正常。但当我从类中的函数调用时,它返回子过程返回的DataTable。我想返回主过程返回的数据 我的主要程序是: ALTER PROCEDURE [dbo].[StoredProcedure2] @QuaterList varchar(50) = NULL AS BEGIN DECLARE @sql nvarchar(4000) SELECT @sql='SELECT Id, Sugge

我有一个sql存储过程,它调用另一个sql存储过程。在sql server中执行时,我工作正常。但当我从类中的函数调用时,它返回子过程返回的DataTable。我想返回主过程返回的数据

我的主要程序是:

ALTER PROCEDURE [dbo].[StoredProcedure2]

@QuaterList varchar(50) = NULL
AS
BEGIN
    DECLARE @sql nvarchar(4000)

    SELECT @sql='SELECT Id, Suggester, Requester, Date_Created from CRM.dbo.CRM_Doctor_Request WHERE 1=1 '
    If (@QuaterList) IS NOT NULL
    BEGIN
        DECLARE @MonthsList varchar(1000)
        EXEC dbo.SPGetMonthsListforMultipleQuaters  @QuaterList, @MonthsList OUTPUT
        SELECT @MonthsList
        SELECT @sql=@sql + ' AND MONTH(Date_Created) in ('
        + SUBSTRING(@MonthsList, 1, LEN(@MonthsList)-1) +')'
    END


    EXEC sp_executesql @sql, N' @QuaterList varchar(50) ', 
                    @QuaterList
END
子过程SPGetMonthListForMultipleQuaters:


问题解决了。这是因为我写了SELECT@MonthsList,所以它也返回了不需要的内容,而且也造成了问题。所以我把它取下来,问题就解决了

新程序代码为:

ALTER PROCEDURE [dbo].[StoredProcedure2]

@QuaterList varchar(50) = NULL
AS
BEGIN
    DECLARE @sql nvarchar(4000)

    SELECT @sql='SELECT Id, Suggester, Requester, Date_Created from CRM.dbo.CRM_Doctor_Request WHERE 1=1 '
    If (@QuaterList) IS NOT NULL
    BEGIN
        DECLARE @MonthsList varchar(1000)
        EXEC dbo.SPGetMonthsListforMultipleQuaters  @QuaterList, @MonthsList OUTPUT

        SELECT @sql=@sql + ' AND MONTH(Date_Created) in ('
        + SUBSTRING(@MonthsList, 1, LEN(@MonthsList)-1) +')'
    END


    EXEC sp_executesql @sql, N' @QuaterList varchar(50) ', 
                    @QuaterList
END

问题解决了。这是因为我写了SELECT@MonthsList,所以它也返回了不需要的内容,而且也造成了问题。所以我把它取下来,问题就解决了

新程序代码为:

ALTER PROCEDURE [dbo].[StoredProcedure2]

@QuaterList varchar(50) = NULL
AS
BEGIN
    DECLARE @sql nvarchar(4000)

    SELECT @sql='SELECT Id, Suggester, Requester, Date_Created from CRM.dbo.CRM_Doctor_Request WHERE 1=1 '
    If (@QuaterList) IS NOT NULL
    BEGIN
        DECLARE @MonthsList varchar(1000)
        EXEC dbo.SPGetMonthsListforMultipleQuaters  @QuaterList, @MonthsList OUTPUT

        SELECT @sql=@sql + ' AND MONTH(Date_Created) in ('
        + SUBSTRING(@MonthsList, 1, LEN(@MonthsList)-1) +')'
    END


    EXEC sp_executesql @sql, N' @QuaterList varchar(50) ', 
                    @QuaterList
END