2013-03-17 65 views
7

我正在學習Visual Studio 2012的「數據庫項目」系統,使用帶更新1的Visual Studio 2012和SSDT。在Visual Studio 2012中使用數據庫項目和SQL數據工具:如何獲取臨時表來解決?

我發現它非常擅長在我的數據庫中發現真正的問題,尤其是編程存儲過程中的錯誤,其中有人從數據庫表中刪除了一個字段,但沒有通過並驗證所有存儲過程都沒有錯誤地執行。因此,通過Visual Studio 2012中的「build」命令驗證您的.sql腳本非常方便。我討厭放棄它。

但我還注意到,無論何時在存儲過程中使用#TEMPTABLE,即使關閉了「啓用對常用對象的擴展Transact-SQL驗證」,仍然會出現「構建錯誤」,涉及#temptable.field引用在存儲過程中。

數據庫項目採取哪些步驟來確定臨時表的模式?由於我的臨時表根據定義並不存在於主模式中,因此在創建數據庫之後,通過「導入數據庫」選項將實際生產SQL數據庫導入Visual Studio時,它們並未進入我的數據庫項目。

我應該創建「#TEMPTABLE.SQL」文件並將它們添加到我的項目中嗎?

錯誤示例:

c:\dev\...\dbo\Stored Procedures\xyz.sql(95,96): Warning: SQL71502: Procedure: [dbo].[proc123] has an unresolved reference to object [#temptable1].[somefield1]. 

如果有一種方法,包括定義在使用temptables一次的腳本,並將其包含到不同的地方,有必要了解這些,如果T-SQL這是很好的,如果擴展驗證的轉向做了我認爲應該做的事情,那麼也許沒有必要。

Forum post suggests this isn't possible to fix and that all I can do is effectively turn off this warning at a file level, which is kind of horrible.

A question on this same subject but for Visual Studio 2010表明,這是一個領域,這項技術已經被完全破壞和微軟已經知道了這件事多年,做過什麼了。 VS2012.U1 + SSDT_Dec2012現在好了嗎?

+0

您是否引用了在其會話範圍內創建的臨時表,然後在其他地方使用(在1個過程中創建,然後在另一個過程中使用)?或者這一切都在一個過程中? – Rich 2013-03-17 18:48:20

+0

這些臨時表用作存儲過程的幾乎「不可見的輸入」,在調用此存儲過程之前創建,並且只能由調用的存儲過程修改。事實上,這可能是一個非常討厭的「模式嗅覺」,因爲很難確切地說出這個存儲過程作爲前置狀態存在的存在。我不喜歡它,但這是我必須在裏面工作的。更糟糕的是,創建臨時表的應用程序是現在爲臨時表定義模式的唯一地方。我正在尋找' - #pragma'或... – 2013-03-18 00:03:30

+0

我在微軟的'social.msdn'網站上提出了同樣的問題:http://social.msdn.microsoft.com/Forums/en-US/ ssdt /線程/ 12c0a590-4273-4861-8d00-a5804b0ea6cc – 2013-03-20 16:52:01

回答

3

這就是臨時表的問題,你應該使用表值函數。

+0

這是正確的。微軟可能無法安全地實現臨時表系統。 – 2013-10-02 22:15:37

相關問題