2011-11-22 72 views
1

在SQL 2005上,我有一個簡單的SP,用於從表中選擇行。 SP不使用臨時表或返回多個結果集。在VS2010中,我將SP從服務器資源管理器拖動到DBML設計器,並將SP添加到LINQ數據上下文中。一切正常。如果我然後腳本表和SP到另一個實時SQL 2005服務器我收到錯誤「無法檢測到以下存儲過程的返回類型..」就像我說的,沒有臨時表或多個結果集通常產生這個錯誤。服務器上可能會有其他內容導致此問題嗎?LINQ to SQL - 存儲過程返回類型錯誤

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 
+0

同樣的問題: http://stackoverflow.com/questions/927006/linq-to-sql-cant-modify迴歸類型的存儲過程 –

+0

這是相同的結果不知道,如果原因是相同的,雖然 –

回答

0

好吧,它在服務器上失敗的原因是需要訪問DBMS上的元數據所需的權限。需要這些才能從SP創建返回值數據類型。通過提升SQL用戶帳戶,然後將SP拖到DBML設計器上..賓果......它的工作原理!

+0

不是一個特別有用的解決方案 - 你應該包括你執行的確切步驟,以便其他人可以做同樣的事情。 – Bertie

2

請確保您有:

SET NOCOUNT ON; 

爲 'BEGIN' 語句後在您的SP的第一道防線。

如果SP不具備這一點,那麼它返回像

'10 Rows affected...' 

其中的Linq試圖interprete作爲函數結果的部分消息。我已經咬了我很多次!

+0

啊,謝謝。儘管已經在SP中。 –

+0

沒有看到你的SP,那麼艾倫我不能說它可能是什麼。 @Mark Pim我可以問一下你對我的帖子所做的修改嗎? – shawty

+0

@Mark Pim ..啊,是的,那個老栗子......沒有我的強項:-)(抱歉放在這裏,看不到如何私下回復) – shawty

0

這是Linq to SQL的一個已知問題,令人沮喪。它似乎也有點不可預測。我可靠地解決這個問題的唯一方法是在我需要它返回結果集時,不要讓L2S調用存儲過程。我把它稱爲表值UDF。 L2S似乎沒有這些問題,我從來沒有遇到過使用它們的任何問題。

+0

它肯定是不可預測的。我看不到爲什麼相同的數據庫對象在實時服務器上中斷。我會嘗試刷新 - 首先重建 –

+0

好的,我看不出爲什麼DBML設計器無法爲活動框上的相同對象創建返回類型,但我使用DBML設計器來剪切並粘貼XML,以解決問題。我正在尋找.. –

-1

使用

創建過程Getxxxxxxx

@xxxxx唯一標識符 ,@唯一標識符

設定FMTONLY關 XXXXX //您查詢 設定FMTONLY上

+0

即使關閉,我也收到了這條消息。問題是我正在使用SQL OUTPUT子句創建臨時表,顯然它無法從中獲取元數據。我將它更新爲OUTPUT而不是表格變量,並解決了它。 – xr280xr

+0

無意義的文章 - 沒有細節,沒有正確的代碼 - 完全沒有幫助。 – Bertie

相關問題