我想要使用一個表值函數,並從多個存儲過程中調用它,而不是在所有存儲過程中重複相同的查詢,但爲了與舊版VB6/UltraGrid應用程序兼容,我需要保留來自原始表格。我可以從表值函數返回外鍵列嗎?
在表值函數中,我可以指定PRIMARY KEY
,但是有沒有辦法指定'FOREIGN KEY'?我試圖修改這樣的返回表,但我得到一個語法錯誤:
ALTER TABLE @ReturnTable
WITH CHECK ADD CONSTRAINT [FK_ReturnTable_OtherTable]
FOREIGN KEY([OtherTableID])
REFERENCES [dbo].[OtherTable] ([OtherTableID])
謝謝,我很懷疑,但我絕不是專家。目前,我正在加入存儲過程中的原始表格以將FK列拉出來,但是這種做法失敗了。 – robertc 2010-09-29 14:23:56
我會推薦在每個存儲過程中使用常規表和連接。使用此函數可能會混淆優化器,並導致執行計劃錯誤和執行速度慢的查詢。 sql的目標是使用查詢來快速建立索引。許多人陷入試圖通過嘗試刪除重複和其他典型應用程序代碼效率低下來使SQL代碼「光鮮」的陷阱。這可能會導致非常低效的SQL性能。我已經看到非常微妙的SQL代碼更改,導致性能大幅下降。 – 2010-09-29 14:38:10