在特定架构上下文下运行sql查询

时间:2009-12-10 15:04:40

标签: sql schema

我们正在考虑创建具有自己的3个表的新模式,这些表将为个别客户即时创建。

要在过程中为这些表运行特定查询,我们是否应该这样。

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;

在这种情况下,来自不同架构的并发客户可以更新自己的架构表,否则会发生冲突。

欢迎您的建议。 阿尼尔

1 个答案:

答案 0 :(得分:0)

大多数SQL数据库都将每个表创建为该数据库中的唯一实体。这意味着每个表都可以单独修改和更改,与其他表无关。 CUSTOMERA.TABLE_ONE是数据库中CUSTOMERB.TABLE_ONE的另一个对象。它们共享相同的名称,但它们不是具有可能不同布局的相同对象(因为它们具有不同的模式)。

因此除非对RDBMS有一些限制,否则你可以这样做。现在为每个用户设置不同的模式可能不太好。如果您开发相同的应用程序来处理多个客户,则必须确保它适用于所有架构和所有客户。在可能不同的模式版本中。

如果您打算使用多租户架构,那么对表使用某种扩展名可能更明智。所以你有一个DB.TABLE_ONE,有一个CUSTOMER_DATA列,你可以用一种熟悉且灵活的格式(比如JSON或XML)来放置数据。有些RDBMS认为它是本机特性(我相信DB2就是其中之一)。

希望这有帮助。