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
确保你有:
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