可能与多个数据库连接 [英] Possible with multiple database connections

查看:97
本文介绍了可能与多个数据库连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

tSQLt领域的新手(很棒的工具集),在我要为其进行测试的存储过程中遇到了一个小问题.

New to the tSQLt world (great tool set) and encountered a minor issue with a stored procedure I am setting up a test for.

如果由于某种原因,我有一个连接到多个数据库甚至多个SQL服务器(链接服务器)的存储过程.

If I for some reason have a stored procedure which connects to mutiple databases or even multiple SQL servers (Linked Servers).

在这种情况下是否可以使用tSQLt进行单元测试?

Is it possible to do unit tests with tSQLt in such a scenario?

推荐答案

我已经评论了,但是我想补充一点.因此,正如我已经说过的,您可以做适合单个事务的任何事情.

I commented already, but I would like to add some more. So as I said already, that you can do anything that fits into the single transaction.

但是对于您的情况,我建议为每个跨数据库/实例对象创建同义词,然后在各处使用同义词.

But for your case I would suggest to create synonyms for every cross database/instance object and then use synonyms everywhere.

我创建了以下函数来模拟视图/表同义词.它有一些局限性,但至少可以处理简单的用例.

I've created following function to mock view/tables synonyms. It has some limitations but at least it can handle simple use cases.

CREATE PROCEDURE [tSQLt].[FakeSynonymTable] @SynonymTable VARCHAR(MAX)
AS
     BEGIN

         DECLARE @NewName VARCHAR(MAX)= @SynonymTable+REPLACE(CAST(NEWID() AS VARCHAR(100)), '-', '');
         DECLARE @RenameCmd VARCHAR(MAX)= 'EXEC sp_rename '''+@SynonymTable+''', '''+@NewName+''';';

        EXEC tSQLt.SuppressOutput
              @RenameCmd;

        DECLARE @sql VARCHAR(MAX)= 'SELECT * INTO '+@SynonymTable+' FROM '+@NewName+' WHERE 1=2;';

        EXEC (@sql);

        EXEC tSQLt.FakeTable
              @TableName = @SynonymTable;
     END; 

这篇关于可能与多个数据库连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆