【问题标题】:Is switching database dynamically possible in MSSQL?在 MSSQL 中可以动态切换数据库吗?
【发布时间】:2017-04-23 23:57:07
【问题描述】:

我有一个场景,每个用户都有不同的数据库

  eg:  user1 = userDB1 (database name)
       user2 = userDB2 (database name)

       ..
       userN = userDBN  

在我的代码中,我有一个类似这样的查询。

 select * from user1.product;
 select * from user2.product;

所以我必须在触发此查询之前派生和更改数据库名称。

我想知道我是否可以在 MS-SQL 服务器端进行一些更改,我必须正确查询

select * from user.product;

这样用户将在事务开始之前被 user1 或 user2 替换。是否有任何可用的数据库端机制,我可以在触发查询之前使用它来切换数据库名称。

由于有很多复杂的查询,我不得不去更改每个查询,这很痛苦。

注意-所有这些数据库都在同一个 SQL 服务器上。

提前谢谢你!!

【问题讨论】:

  • 使用通用过程创建数据库用户,该过程在正确的数据库中为正确的用户执行正确的查询。
  • 您可以使用dynamic sql,或者在Java 中更新连接字符串。但我建议您考虑将 User as foreign key 添加到您的表中。

标签: java sql sql-server schema


【解决方案1】:

你确定你说的是数据库,而不是模式?

select * from user1.product; -- user1 is scheme
select * from user1..product; --user1 is database

如果是模式,您可以:

  1. 为每个用户创建架构
  2. 为数据库用户设置默认模式(不是服务器登录)。在您的情况下,所有用户都应该不同。
  3. 当你执行查询时

    从产品中选择 *;

表“产品”将来自默认架构。

如果是数据库,您应该尝试更改每个用户的连接字符串

【讨论】:

    【解决方案2】:

    您可以为每个查询动态添加前缀:

    USE userDB1; SELECT ...
    

    【讨论】:

      猜你喜欢
      • 2019-04-02
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      相关资源
      最近更新 更多