4

我最近继承了一个使用 SQL Server 2008 作为后端服务器的内部 ASP.NET 网站。SQL Server 有一个数据库,每个数据库Database1中有几个Companies,都具有相同的表集。

例如:

Database1
     Company1.Table1
     Company1.Table2
     Company2.Table1
     Company2.Table2

该网站调用了几个存储过程。但是,存储过程已被编码为从硬编码的公司名称中选择数据。

例如:

SELECT * FROM Company1.Table2

迄今为止,这一直运行良好,因为该网站仅链接到Company1. 现在的计划是将网站链接到Company2. 实际上,Company 2通过 IIS 上的单独设置被用作测试平台

有没有一种简单的方法,可能通过公司名称传递给存储过程,以便能够保留此设置?

也有人建议另一种方法是单独的 SQL 实例,因此我可以使用相同的database\company名称,这意味着更改很少。

另一个建议是简单地将存储过程从 to 复制Company 1Company 2更改硬编码名称Company 2

对不起,如果我有点含糊不清,但今天早上我已经把它放在我的桌子上了,我既不是 SQL Server 也不是网站专家。

提前感谢您的任何建议。

干杯

贾斯汀

4

2 回答 2

1

有没有一种简单的方法,可能通过公司名称传递给存储过程,以便能够保留此设置?

保留此设置的最简单方法(不了解 ASP.net 代码)是运行整个数据库的单独副本以进行测试。我建议第三个副本用于开发,但这已经离题了。

以上所有方法都是可行的,但简单地复制数据库意味着您不必更改数据库中的任何代码。希望数据库名称不会在 ASP.net 代码中硬编码,因此您应该能够轻松地将其指向新数据库。

这为您提供了拥有用于测试的独立数据集的额外好处,因此您在测试更改时不会追逐移动目标。

对其他建议方法的简要评论:

可能通过公司名称传递给存储过程

这不仅意味着重构存储过程,还可能需要一些动态 SQL,并可能使您面临 SQL 注入(不一定是问题,因为它是内部的)。

另一个建议是简单地将存储过程从公司 1 复制到公司 2 并更改公司 2 中的硬编码名称?

同样,这将涉及重构存储过程(尽管只是使用查找/替换),我建议它需要进行全面测试以证明重构工作正常。

于 2013-03-26T10:18:57.007 回答
0

这将合并来自具有相同表结构的两个不同数据库表的数据

SELECT * FROM Company1.Table2
UNION ALL
SELECT * FROM Company2.Table2
于 2013-08-02T06:37:20.957 回答