首页 > 解决方案 > 如何使用动态表名?

问题描述

我有一个数据库,每个公司都有自己的表和所有公司的相同表名,例如:

[COMPANY 1$Cities], [COMPANY 1$Customers], [COMPANY 1$Documents]  
[COMPANY 2$Cities], [COMPANY 2$Customers], [COMPANY 2$Documents]   
[COMPANY 3$Cities], [COMPANY 3$Customers], [COMPANY 3$Documents]

当我从特定公司选择一个值时,我有一个可以正常工作的存储过程。

但是,问题是我必须为我们在数据库中拥有的每家公司创建这个存储过程,这很多(而且我认为这不是最好的决定,基于数据库性能

最后,我想知道是否有一种方法可以使用TABLE NAME中的参数从特定公司中选择值。

就像是SELECT +@CityName+ FROM [dbo].[@CompanyName+$Cities]

标签: sqlsql-serverdatabasedynamic

解决方案


您不需要为此任务编写动态 SQL。创建一个数据库VIEW,您可以在其中合并所有公司的表并添加固定的公司代码。然后,您可以根据该公司代码过滤您的数据,并使用通用 SQL 获得您需要的内容。

但无论如何,这样的数据库设计非常奇怪且难以管理。您可以使用分区表并应用数据安全性来限制公司上的数据。


推荐阅读