簡體   English   中英

帶有臨時表的存儲過程,更新存儲過程的實體框架不起作用 - SET FMTONLY OFF

[英]Stored procedure with temporary tables, Entity Framework updating the stored procedure not working - SET FMTONLY OFF

我有一個包含多個臨時表的存儲過程,當我嘗試在 Entity Framework 中導入它時,它沒有創建復雜類型,並且出現此錯誤:

選定的存儲過程或 function 不返回任何列

當我用谷歌搜索時,我發現在存儲過程中添加這段代碼SET FMTONLY OFF將在我的 EDMX 中創建復雜類型。 我能夠做到。

添加SET FMTONLY OFF后,現在在實體框架中一切正常。

現在我的問題是,將這段代碼添加到包含多個臨時表的存儲過程中是否存在安全威脅?

謝謝你。

您不想只是 SET FMTONLY OFF,因為這可能會產生意想不到的后果,但是您可以返回正確形狀的空結果集,然后在存儲過程的開頭關閉 FMTONLY 並返回。

例如

if 1=0  --this will only run in FMTONLY is ON
begin
  select cast(1 as decimal(12,0) a, cast('x' as nvarchar(20)) b -- . . .
  set fmtonly off
  return;
end

由於 FMTONLY 忽略控制流語句,它將在開始/結束時運行代碼。 客戶端將獲得一個空的結果集,然后該過程存在。 您必須關閉 FMTONLY 否則將不會執行return ,並且稍后您的臨時表會出錯。

當這個存儲過程在沒有 FMTONLY 的情況下運行時,將評估if 1=0 ,並跳過該塊。

但是,在更新 EF model 時為沒有臨時表的存儲過程切換存儲過程是一種有效的替代方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM