实体框架:选定的存储过程或函数不返回任何列

问题描述

我在创建复杂类型时从实体框架收到此错误。他们中的可能会告诉用户 SET FMTONLY OFF 但对我来说它不起作用。存储过程正在返回列,但它返回的列不是固定的。它有时会返回一个包含 2 列或 4 列的表。我正在使用实体框架 5.0。任何帮助将不胜感激

SET FMTONLY OFF
GO

ALTER PROCEDURE [dbo].[sp_hcube_rack] 
    @hcapmaxmodule int
AS   
BEGIN
    DECLARE @col_name varchar(1055)       
    DECLARE @count  int,@cnt int
    DECLARE @col varchar(255),@cmd nvarchar(1000)
    DECLARE @ParmDeFinition nvarchar(500);

    DECLARE getinfo CURSOR FOR
        SELECT c.name 
        FROM sys.tables t 
        JOIN sys.columns c ON t.Object_ID = c.Object_ID
        WHERE t.Name = 'Hydrcube_rack_mapping'

    OPEN getinfo
  
    FETCH NEXT FROM getinfo INTO @col

    CREATE TABLE #column_tbl (ID INT,tempuserName varchar(MAX))

    SET @cnt = 1

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SELECT @cmd = N'SELECT @count = COUNT(*) 
                        FROM Hydrcube_rack_mapping 
                        WHERE Hcap_modules = ' + CAST(@hcapmaxmodule AS nvarchar(20)) + 
                        ' AND ['+@col+'] IS NULL'

        EXEC sp_executesql @cmd,@ParmDeFinition = N'@count INT OUTPUT',@count = @count OUTPUT;

        IF (@count = 0)
        BEGIN
            SET @col_name = CONCAT(@col,',@col_name)

            INSERT INTO #column_tbl (ID,tempuserName) 
            VALUES (@cnt,@col_name)

            SET @cnt = @cnt + 1
        END 

        FETCH NEXT FROM getinfo into @col
    END

    CLOSE getinfo
    DEALLOCATE getinfo

    SELECT TOP 1 @col_name = tempuserName 
    FROM #column_tbl 
    ORDER BY ID DESC

    SELECT @cmd = 'SELECT ' + LEFT(@col_name,LEN(@col_name) - 1) +
                  ' FROM Hydrcube_rack_mapping ' + 
                  ' WHERE Hcap_modules = ' + CAST(@hcapmaxmodule AS nvarchar(20)) 
 
    EXEC sp_executesql @cmd
END
GO

存储过程的输出

hcuberack|kit14_1|kit13_1|kit12_1|kit7_2|kit6_2|kit4_3|kit3_4|Hcap_mod|id
24       |1      |1      |1      |1     |1     |0     |0     |24      |24

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)