[英]How to join a table within a user defined function whose name is provided as parameter?
上下文
我的SQL Server數據庫中有三個表:1)學校,2)學院,3)大學。
然后,我有另一個表:標簽。
三個表( 學校,學院,大學 )中的每個表都可以具有與之關聯的標簽 。 為此,我有三個關聯表: SchoolTags,CollegeTags,UniversityTags 。
問題
我正在嘗試創建一個用戶定義的函數,該函數將關聯表的名稱作為參數(即“ SchoolTags”)和實體的ID(學校/學院/大學),並將返回與該EntityId相關聯的標記的列表。
我遇到的問題是我必須將Tag與名稱作為參數進入的表連接起來。 為此,我正在創建一個動態查詢。 而且我們不能在SQL Server用戶定義函數中運行動態查詢。
題
知道如何實現嗎?
注意:我想要創建時使用單獨的關聯表,並且不想將它們轉換為通用關聯表,也不想基於函數中的表名添加If-Else
,以便在創建新關聯表時,我不需要更新我的功能。
我正在使用Microsoft SQL Server。
任何一種語言,你使用,你可能會使用if
:
begin
if table = 'school' then
begin
. . .
end;
else if table = 'college' then
. . .
end;
確切的語法取決於您所使用的數據庫的腳本語言。
您想要的是不可能的。 您不能將表名作為參數傳遞給UDF,並且不能在UDF中使用動態sql來創建和執行特定於作為參數傳遞的表的語句。 您已經知道別無選擇,只能在UDF中使用if-else語句來實現您的目標-這是您夢pipe以求的“架構更改時無需更新(或驗證)代碼”(是的-我改寫它以使您的問題更加明顯)。
可能還有其他方法可以實現某些有用的功能-但我建議您考慮得太遠了,並試圖在沒有明確目的的情況下實現泛型功能。 這是一個非常困難且容易出錯的路徑,需要復雜的tsql技能。
並且要重申先前的響應,您有一個模式問題。 您特意創建了三個不同的實體-現在,您想要一個通用函數與它們中的任何一個一起使用。 因此,在花大量時間在這個特定方面之前,您應該花一些時間仔細考慮一下您打算如何使用這些表(即針對這些表編寫查詢)。 如果您發現自己經常使用聯合將這些實體組合成一個公共結果集,那么您的實際業務與您的模型(架構)可能不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.