2010-09-29 87 views
0

我想要使用一個表值函數,並從多個存儲過程中調用它,而不是在所有存儲過程中重複相同的查詢,但爲了與舊版VB6/UltraGrid應用程序兼容,我需要保留來自原始表格。我可以從表值函數返回外鍵列嗎?

在表值函數中,我可以指定PRIMARY KEY,但是有沒有辦法指定'FOREIGN KEY'?我試圖修改這樣的返回表,但我得到一個語法錯誤:

ALTER TABLE @ReturnTable 
WITH CHECK ADD CONSTRAINT [FK_ReturnTable_OtherTable] 
FOREIGN KEY([OtherTableID]) 
REFERENCES [dbo].[OtherTable] ([OtherTableID]) 

回答

2

不,你不能。該函數返回一個僅在運行時存在的「虛擬」表,並且無法將FK存儲到這樣的假想/瞬態行集合中。如果不知道你的模式和你想要完成什麼,我最好猜測它試圖使用觸發器來執行此操作。

+0

謝謝,我很懷疑,但我絕不是專家。目前,我正在加入存儲過程中的原始表格以將FK列拉出來,但是這種做法失敗了。 – robertc 2010-09-29 14:23:56

+1

我會推薦在每個存儲過程中使用常規表和連接。使用此函數可能會混淆優化器,並導致執行計劃錯誤和執行速度慢的查詢。 sql的目標是使用查詢來快速建立索引。許多人陷入試圖通過嘗試刪除重複和其他典型應用程序代碼效率低下來使SQL代碼「光鮮」的陷阱。這可能會導致非常低效的SQL性能。我已經看到非常微妙的SQL代碼更改,導致性能大幅下降。 – 2010-09-29 14:38:10

1

您的傳統網格會通過視圖看到FK關係嗎?或者查詢無法存儲爲視圖?

+0

我認爲這值得一試,我會看看它是否有效。 – robertc 2010-09-29 14:22:46

相關問題