LINQ到SQL -存储过程返回类型错误

本文关键字:返回类型 错误 存储过程 SQL LINQ | 更新日期: 2023-09-27 18:15:20

在SQL 2005上,我有一个简单的SP从表中选择行。SP不使用临时表或返回多个结果集。在VS2010中,我将SP从服务器资源管理器拖到DBML设计器中,SP被添加到LINQ数据上下文中。一切正常。如果我然后将表和SP脚本到另一个活动的SQL 2005服务器上,我会得到错误"无法检测到以下存储过程的返回类型……"就像我说的,没有临时表或多个结果集通常会产生此错误。会不会是服务器上的其他东西造成的?

SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE [dbo].[spUsers]
    AS
    BEGIN
        SET NOCOUNT ON;
        SELECT top 100 * from Users
    END

LINQ到SQL -存储过程返回类型错误

确保你有:

SET NOCOUNT ON;

作为SP中'BEGIN'语句之后的第一行。

如果你的SP没有这个,那么它返回像

这样的消息
'10 Rows affected...'

Linq试图将其解释为函数结果的一部分。我被它咬了很多次!!

这是Linq to SQL的一个已知问题,也是一个令人沮丧的问题。它似乎也有些不可预测。我能够可靠地解决这个问题的唯一方法是,当我需要L2S返回结果集时,不让它调用存储过程。我将其称为表值UDF。L2S似乎没有这些问题,我从来没有遇到过使用它们的任何问题。

好的,它在活动服务器上失败的原因是与访问DBMS上的元数据所需的特权有关。通过提升SQL用户帐户,然后将SP拖到DBML设计器上,就可以从SP中创建返回值数据类型。宾戈游戏. .它的工作原理!

使用

create procedure Getxxxxxxx

@xxxxx uniqueidentifier, @xxxxx uniqueidentifier

set fmtonly off//你查询设置fmtonly