2012-03-14 20 views
1

我已经检查了熟悉的帖子,我希望这之前没有被覆盖过。TSQL数据库名称和模式的抽象

我正在调查数据库的名称和架构在调用存储过程在不同于当前位置的数据库中的方法。东西在下面的方法:。

执行[数据库名] [方案] [storedProcedureName]

的想法是允许数据库和架构取决于运行时间的要求来提供。这样做的显而易见的方式是使用动态SQL,但对于系统我使用这是一个很大的禁忌。无论如何,有人知道在这种情况下抽象DB名称和架构?我能想到的唯一选择是将名称等存储在变量中,以及如何将其纳入执行调用或能够存储数据库实例,但我不知道这是否可能。

任何反馈意见将是有用的,谢谢。

回答

0

我不知道它抽象为你描述(如参数什么的?),但一个想法可能是做这样的事情:

IF @db = 'dababase1' 
BEGIN 
    IF @schema = 'schema1' 
    BEGIN 
     EXECUTE database1.schema1.procedure 
    END 
    IF @schema = 'schema2' 
    BEGIN 
     EXECUTE database1.schema2.procedure 
    END 
    ... 
END 
IF @db = 'database2' 
BEGIN 
... 

你必须知道在设计时间什么所有可能的数据库和模式虽然...

0

这是有点难以理解为什么落后于这种方法。什么是调用你的存储过程?这可能是更好的地方通过使用不同的连接字符串来更改数据库?

如果你想切换DB一个TSQL语句内再看看USE命令,且在EXECUTE AS