繁体   English   中英

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

[英]LINQ to SQL - Stored Procedure Return Type Error

在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

确保您具有:

SET NOCOUNT ON;

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

如果您的SP没有此功能,则它将返回如下消息

'10 Rows affected...'

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

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

好的,它在实时服务器上失败的原因是与访问DBMS上的元数据所需的特权有关。 这些是从SP创建返回值数据类型所必需的。 通过提升SQL用户帐户,然后将SP拖到DBML设计器上。

采用

创建过程Getxxxxxxx

@xxxxx uniqueidentifier,@ xxxxx uniqueidentifier

set fmtonly off //您查询将fmtonly设置为on

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM