2013-08-16 43 views
0

我有一個存儲過程,而模式很好,當我註釋掉一個簡單IF聲明:DBML - 存儲過程建模失敗

IF LEN(@myVariable) > 0 
    BEGIN 
     SET @myVariable = SUBSTRING(@myVariable, 1, LEN(@myVariable)-1) 
    END 

如果我不註釋掉這一行,我得到的錯誤:

The return types for the following stored procedures could not be detected. Set the return type for each stored procedure in the Properties window. dbo.my_stored_procedure

爲什麼這個語句會導致返回類型的自動生成失敗?

當我註釋掉這行代碼,我得到我期待的返回類型,以其全部財產(在DBML自動建模)沿

有我缺少一個設置?

在此先感謝...

+0

你什麼回報?當沒有指定'IF'條件未被命中時會發生什麼,返回類型可能無法檢測。 –

+0

嗨,格特,當我註釋掉你在上面看到的「IF」情況時,我會得到正確的類型。存儲過程返回列的列表,並且它正確地建模爲一個類,其中包含表示每個列的屬性(因爲它應該)。我只遇到一個不可檢測的返回類型,'IF'條件未被註釋掉。我不知道爲什麼上面的'IF'語句會使返回類型檢測不到...? – Craig

+0

是的,也許,因爲它是未定義的,如果'LEN(@myVariable)<= 0'。 –

回答

0

謝謝格特送我正確的方向。改變會後聲明正確建模沒有任何問題的存儲過程:

IF LEN(@myVariable) > 0 
    BEGIN 
     SET @myVariable = SUBSTRING(@myVariable, 1, LEN(@myVariable)-1) 
    END 

到:

IF LEN(@myVariable) > 0 
    BEGIN 
     SET @myVariable = LEFT(@myVariable, NULLIF(LEN(@myVariable)-1, -1)) 
    END