Sql server 存储过程只返回表1中的数据,而不是10个表中的数据

Sql server 存储过程只返回表1中的数据,而不是10个表中的数据,sql-server,Sql Server,这可以正常工作,但只返回tables集合来自函数的第一个表。如果我在SQL Server Management Studio中执行它,我会得到正确的答案-我需要以某种方式转换它,以便MVC代码 ALTER PROCEDURE [dbo].[ProcessListSQL] ( --@CommaDelimitedList AS NVARCHAR(MAX), @SQLtoExecute AS NVARCHAR(MAX), @Result VARCHAR(MAX) OUT

这可以正常工作,但只返回tables集合来自函数的第一个表。

如果我在SQL Server Management Studio中执行它,我会得到正确的答案-我需要以某种方式转换它,以便MVC代码

ALTER PROCEDURE [dbo].[ProcessListSQL]  
    ( --@CommaDelimitedList AS NVARCHAR(MAX),
     @SQLtoExecute AS NVARCHAR(MAX),
     @Result VARCHAR(MAX) OUTPUT)
AS 
BEGIN
    DECLARE @Statements TABLE
                        (PK INT IDENTITY(1,1) PRIMARY KEY,
                         SQLObject NVARCHAR (MAX)
                        )

    SET @SQLtoExecute = REPLACE (@SQLtoExecute, '"', '''')
    /*================*/
    DECLARE @CommaDelimitedList  AS NVARCHAR(MAX)
    DECLARE @ddd NVARCHAR(MAX)
    DECLARE @R1 NVARCHAR(MAX)

    SET @ddd=''

    SELECT @ddd = @ddd + organisation  + ',' 
    FROM dbo.Orgs;

    SET @CommaDelimitedList = @ddd   /*select all tables that need to be interrogated*/

    /*================*/
   INSERT INTO @Statements
       SELECT PARAM 
       FROM [dbo].[fn_MVParam](@CommaDelimitedList,',')

    DECLARE @i INT
    SELECT @i = MIN(PK) FROM @Statements

    DECLARE @max INT
    SELECT @max = MAX(PK) FROM @Statements

    DECLARE @SQL AS NVARCHAR(MAX) = NULL
    DECLARE @Object AS NVARCHAR(MAX) = NULL
 
    WHILE @i <= @max 
    BEGIN       
        SELECT @Object = SQLObject FROM @Statements WHERE PK = @i        /*gets the table from the array table*/
        SET @SQL = REPLACE(@SQLtoExecute, '{RP}', @Object)               /*replaces RP with tablename */
        -- Uncommend below to check the SQL
        -- PRINT @SQL
        DECLARE @returnstatus nvarchar(15);     /*mh did this */
        SET @returnstatus = NULL;               /*mh did this */

        EXECUTE sp_executesql  @SQL,@R1=@R1
        SET @Result = @Result + @R1
        SELECT @Object = NULL
        SELECT @SQL = NULL
        SET @i = @i + 1
    END
END  

我能做到这一点的最好方法是从过程B调用过程A。在过程B中,将结果插入临时表并选择临时表,然后将其作为标准存储过程从MVC调用。

它可以在SSMS中运行,但不能从MVC应用程序中运行,因为您正在while循环中选择数据。你必须思考如何避免循环。RBAR,为什么要避免循环,请检查这是一个答案吗?还是对问题的澄清?在这种情况下,应将其添加到问题中。
USE [HOTFF]
GO
CREATE TABLE #Resultxx
(
   organisation varchar(max),  
   Product varchar(max)
)

DECLARE @return_value int
DECLARE @Result NVARCHAR (MAX)

INSERT INTO #Resultxx 
    EXEC @return_value = [dbo].[ProcessListSQL]
                          @SQLtoExecute = N'SELECT organisation, product FROM  [{rp}] WHERE category=''offers'' and Type=''free''',
                          @Result = '@Result OUTPUT'

 SELECT * FROM #Resultxx 

 DROP TABLE #Resultxx