簡體   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