Rod*_*ner 31 stored-procedures entity-framework entity-framework-4
我有以下存储过程,当我尝试功能导入时,我说我的存储过程不返回任何列.我错过了什么?有什么建议?
Proc:
ALTER PROCEDURE [healthc].[ev_kc_Products_Search]
(
@SearchString VARCHAR(1000)
)
AS
SET NOCOUNT ON
DECLARE @SQL VARCHAR(max),
@SQL1 VARCHAR(max),
@Tag VARCHAR(5)
CREATE TABLE #T
( ID INT,
VendorName VARCHAR(255),
ItemName VARCHAR(255),
Type VARCHAR(2),
Sequence TINYINT
)
SET @SQL = '
INSERT #T
SELECT VendorID ID,
Name VendorName,
NULL ItemName,
''V'' Type,
0 Sequence
FROM tblVendors
WHERE '+REPLACE(@SQL1,@Tag,'Name')+'
UNION ALL
BLAH BLAH BLAH'
EXEC(@SQL)
SELECT ID, VendorName, ItemName, Type FROM #T
Run Code Online (Sandbox Code Playgroud)
ben*_*oam 54
尝试将此行添加到存储过程的开头:
SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)
完成导入后,可以将其删除.
小智 38
幕后发生什么事?
在执行函数导入时 - >获取列信息... Visual Studio执行存储过程,所有param值都为NULL(您可以通过MS SQL Profiler对此进行交叉检查).
执行步骤1,返回存储过程的结果列及其数据类型和长度信息.
获取列信息后,单击"创建新的复杂类型"按钮可在争用中创建SP的复杂类型.
在您的情况下,存储的proc参数不可为空,因此Visual Studio调用失败并且不返回任何列.
怎么办呢?
IF (1=0) BEGIN SET FMTONLY OFF if @param1 is null and @param2 is null then begin select cast(null as varchar(10)) as Column1, cast(null as bit) as Column2, cast(null as decimal) as Column3 END END
确切地说(在你的情况下):
IF (1=0) BEGIN SET FMTONLY OFF if @SearchString is null then BEGIN select cast(null as int) as ID, cast(null as varchar(255)) as VendorName, cast(null as varchar(255)) as ItemName, cast(null as varchar(2)) as Type END END
参考:http://mysoftwarenotes.wordpress.com/2011/11/04/entity-framework-4-%E2%80%93-the-selected-stored-procedure-returns-no-columns-part-2/
在完整性和简单的@benshabatnoam答案,只需将以下代码放在开头:
IF (1=2)
SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)
注意:它适用于EF 6.1.3和Visual Studio 2015 Update 3
归档时间: |
|
查看次数: |
31525 次 |
最近记录: |