Sql server 存储过程只返回表1中的数据,而不是10个表中的数据
这可以正常工作,但只返回tables集合来自函数的第一个表。如果我在SQL Server Management Studio中执行它,我会得到正确的答案-我需要以某种方式转换它,以便MVC代码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
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