我有一个存储过程,我根据从搜索屏幕收到的输入构建自定义查询,用户可以在多个可用过滤器中指定一组过滤器。
该过程接受输入,根据所选的选项/过滤器构建查询,并构建动态插入查询。一切正常,程序返回所需的输出。
我的问题是,当我在Entity Framework中选择过程时,它不返回任何列。
我调试了所有可能的原因然后我发现,它没有返回任何列,因为我已经编写了EXEC语句来执行动态查询,因为当我评论EXEC时,它会按预期返回列,但不执行动态查询,它不会达到我的目的。
我尝试了所有可能的解决方法,但发现我的问题没有运气。
有人能建议我解决我的问题吗?我正在粘贴存储过程以供参考。
提前致谢。
Create PROCEDURE spMyProc
@param1 int=0,
@param2datetime = null,
@param3 varchar(100)=null,
@param4 int=0,
@param5 int = 0,
@param6 int = 0,
@param7 varchar(10)=null
AS
BEGIN
SET NOCOUNT ON;
SET FMTONLY OFF;
CREATE TABLE #Results(
col1,col2,col3.....)
Createe table #insTable
(
column1 [bigint] NOT NULL,
column2 [int] NOT NULL,
column3 [varchar](10) NOT NULL,
column4 [varchar](10) NOT NULL,
column5 [int] NOT NULL,
column6 [varchar] (max) not null,
column7 [varchar] 10 not null
)
BEGIN
DECLARE @strsql varchar(4000)
INSERT INTO #insTable (column1, column2, column3, column4, column5, column6, column7)
SELECT
DISTINCT column1, column2, column3, column4, column5, column6, column7 FROM table L with (nolock)
SOME JOINS
IF(@col1 != '')
BEGIN SELECT @strsql = @strsql + ' AND L.LeadTypeId = '+ cast(@LeadTypeId as varchar); END
IF(@col2 != '')
BEGIN SELECT @strsql = @strsql + ' AND CAST(FLOOR(CAST(LastWorkedOn AS float)) AS datetime) = '''+ cast(@LastTimeWorked as varchar) +''''; END
IF(@col3 != '')
BEGIN SELECT @strsql = @strsql + ' AND Campaign.AssignedTo = '''+ @AssignedTo+''''; END
IF(@col4 != '')
BEGIN SELECT @strsql= @strsql + ' AND PostcodeDistrict = '''+ @Postcode +''''; END
IF(@col5 != '')
BEGIN SELECT @strsql = @strsql + ' AND SalesOutcomeId = '+ cast(@OutcomeId as varchar); END
IF(@col6 != '' AND @MAXRV != '')
BEGIN SELECT @strsql = @strsql + ' AND (RATEABLE_VALUE * (cast( 100 - l.RvReductionPercent as float ) / 100)) between '+ cast(@MINRV as varchar)+' and '+ cast(@MAXRV as varchar); END
Execute (@strsql)
END
BEGIN
SELECT * FROM #Results
END
BEGIN
drop table #Results
drop table #insTable
END
END
修改
这不是一个重复的问题,并且人们建议的已经回答的引用,关于通过指定SET FMTONLY OFF按实体框架访问临时表的参考不符合我的查询,因为我已经提到过,一切正常精细。我唯一一个给我带来麻烦的问题是执行动态查询,由于EXEC语句,EF无法识别。因此,请不要将此视为重复问题并给我一个解决方法,以便我可以在存储过程中运行我的动态查询,并将结果用于存储过程中的后续步骤。