C#中的函数导入,动态查询,实体框架和存储过程的问题

时间:2013-03-04 10:35:54

标签: sql entity-framework stored-procedures dynamicquery

我有一个存储过程,我根据从搜索屏幕收到的输入构建自定义查询,用户可以在多个可用过滤器中指定一组过滤器。

该过程接受输入,根据所选的选项/过滤器构建查询,并构建动态插入查询。一切正常,程序返回所需的输出。

我的问题是,当我在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无法识别。因此,请不要将此视为重复问题并给我一个解决方法,以便我可以在存储过程中运行我的动态查询,并将结果用于存储过程中的后续步骤。

0 个答案:

没有答案