Linq to sql LINQ to SQL&;存储过程返回类型

Linq to sql LINQ to SQL&;存储过程返回类型,linq-to-sql,stored-procedures,Linq To Sql,Stored Procedures,以下是我的存储过程: CREATE PROCEDURE PurgeFoo AS DELETE FROM Foo RETURN @@ROWCOUNT 我已将此存储过程添加到我的DBML中,但返回类型为“(自动生成类型)”,但我是int 我做错了什么 编辑: 删除并重新创建存储过程,并将其从DBML中删除。现在,返回类型是“(None”)为什么不从Foo中选择COUNT(*)以在删除行之前对行进行计数,因为所有行都已删除?大概是这样的: CREATE PROCEDURE PurgeFoo

以下是我的存储过程:

CREATE PROCEDURE PurgeFoo
AS
  DELETE FROM Foo
  RETURN @@ROWCOUNT
我已将此存储过程添加到我的DBML中,但返回类型为“(自动生成类型)”,但我是int

我做错了什么

编辑: 删除并重新创建存储过程,并将其从DBML中删除。现在,返回类型是“(None”)

为什么不从Foo中选择COUNT(*)以在删除行之前对行进行计数,因为所有行都已删除?大概是这样的:

CREATE PROCEDURE PurgeFoo
@Rows INT OUTPUT
AS
SET @Rows = SELECT COUNT(*) FROM Foo
DELETE FROM Foo

然后,当调用SP时,可以将输出参数的值作为INT。此外,还可以更改*以使SELECT语句更快地运行。

可以将返回值更改为SELECT。这样,您就得到了一个合适的记录集

CREATE PROCEDURE PurgeFoo
AS
DELETE FROM Foo
SELECT @@ROWCOUNT AS RowsDeleted
GO
或输出参数,如下所示:

CREATE PROCEDURE PurgeFoo
  @RowsDeleted int = 0 OUTPUT
AS
DELETE FROM Foo
SET @RowsDeleted =  @@ROWCOUNT
GO

返回值对于状态代码和错误代码最有用,而不是有意义的数据。

我也尝试过,但我不想创建一个新参数来获取受影响的记录数。嗯。。。奇怪。。我做了同样的事情-在我的例子中,我的LINQ数据上下文上的方法
.PurgeFoo()
确实从它的调用中返回了
INT
。。。。您是否尝试过从DBML模型中删除并重新添加该存储过程??如果您在添加后对其进行了更新,那么模型就不会接受该更新…我已经删除并重新添加了它,但返回类型仍然是“(无)”。但是,我尝试调用.PurgeFoo(),它确实返回INT,即使返回类型不这样说。我完全理解(并同意)您关于返回值应用于状态和错误代码的观点。我简化了这个问题中的存储过程,使其易于理解