2009-12-10 43 views
0

我們正在考慮創建新的模式,並創建其自己的3個表格,這些表格將爲個別客戶實時創建。在特定模式環境下運行SQL查詢

要在程序運行這些表一個特定的查詢,我們應該有這樣的事情。

declare @sName nvarchar(200); 
select @sName =Schema_Name from schema where Schema_Id = passed_id_from_code 
ALTER USER UserName WITH DEFAULT_SCHEMA = @sName 

-- Run the statements here -- 
... 



-- After finishing executing statements 
ALTER USER UserName WITH DEFAULT_SCHEMA = db; 

在這種情況下,來自各種架構的併發客戶可以更新他們自己的架構表,否則會發生衝突。

您的建議受到歡迎。 阿尼爾

回答

0

大多數SQL數據庫有每個表作爲創建該數據庫中的唯一實體。這意味着每個表都可以單獨修改和更改,而與其他表無關。 CUSTOMERA.TABLE_ONE是數據庫中與CUSTOMERB.TABLE_ONE不同的對象。它們共享相同的名稱,但它們不是具有可能不同佈局的相同對象(因爲它們具有不同的模式)。

因此,除非對RDBMS有一些限制,否則可以這樣做。現在每個用戶有不同的模式可能不太好。如果您正在開發同一個應用程序來處理多個客戶,那麼您必須確保它適用於所有架構和所有客戶。在可能不同的模式版本中。

如果你要一個多租戶架構,它可能是明智的使用某種延伸到表。因此,您有一個DB.TABLE_ONE,其中包含一個CUSTOMER_DATA列,您可以將數據以靈活的格式(例如JSON或XML)放入。有些RDBMS認爲,作爲本地特性(我相信DB2是其中之一)。

希望這會有所幫助。