Sql server 2008 SQL Server存储过程查询

Sql server 2008 SQL Server存储过程查询,sql-server-2008,microsoft-dynamics,Sql Server 2008,Microsoft Dynamics,我最近继承了一个内部ASP.NET网站,该网站使用SQL Server 2008作为后端服务器。SQL Server有一个数据库,Database1,每个数据库中有多个公司,所有这些公司都具有相同的表集 例如: Database1 Company1.Table1 Company1.Table2 Company2.Table1 Company2.Table2 SELECT * FROM Company1.Table2 该网站调用了几个存储过程。但是,存储

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

例如:

Database1
     Company1.Table1
     Company1.Table2
     Company2.Table1
     Company2.Table2
SELECT * FROM Company1.Table2
该网站调用了几个存储过程。但是,存储过程已编码为从硬编码的公司名称中选择数据

例如:

Database1
     Company1.Table1
     Company1.Table2
     Company2.Table1
     Company2.Table2
SELECT * FROM Company1.Table2
到目前为止,这一切都很顺利,因为该网站仅链接到
公司1
。现在的计划是将网站链接到
公司2
。实际上,
company2
正通过IIS上的单独设置被用作测试平台

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

还有人建议另一种方法是单独的SQL实例,因此我可以使用相同的
database\company
名称,这意味着几乎没有什么变化

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

抱歉,如果我有点含糊不清,但今天早上我的桌子上已经放了这个,我既不是SQL Server也不是网站专家

提前谢谢你的建议

干杯

贾斯汀

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

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

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

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

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

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

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

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


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

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

SELECT * FROM Company1.Table2
UNION ALL
SELECT * FROM Company2.Table2

单独的数据库或实例将是更好的测试选择。它将测试环境与生产隔离开来。将表名传递到存储过程意味着要么使用动态SQL,要么根据参数将过程编码为分派并执行正确的语句。谢谢大家。我已经走上了一条独立数据库的道路。为建议干杯!乐于帮助,欢迎使用Stack Overflow。如果此答案解决了您的问题,请将其标记为已接受。