【发布时间】:2010-10-25 16:47:00
【问题描述】:
我的项目有一个奇怪的数据库模型——我将有几个具有相同定义的表。每个表存储不同客户端的信息,并且由于安全限制,我们不能将数据放在一个表中。所以它看起来像这样......
table ClientOneData
(
Id (PK, int, not null),
Col1 (varchar(50), not null),
etc.
)
table ClientTwoData
(
Id (PK, int, not null),
Col1 (varchar(50), not null),
etc.
)
我想要一个存储过程来从相应的表中检索数据。我可以通过将表名作为参数传递给 proc 然后构建一个 sql 字符串来执行...
CREATE PROCEDURE GetData
@TableName varchar(100)
AS
BEGIN
DECLARE @sql varchar(max)
SET @sql = 'SELECT * FROM ' + @sql
exec(@sql)
...但这对我来说似乎是根本错误的。并且复制代码,无论是以巨大的案例语句的形式,还是通过“一次性”proc 并为每个客户端创建一个新的,似乎也是错误的。
有没有更好的方法来做到这一点?
我非常愿意接受建议,从我可以在 proc 中做的任何事情到重新处理数据模型(没有将所有数据转储到单个表中)。升级到 SQL-Server 2008 或 2010可能是一种选择,但将是最后的手段。
【问题讨论】:
-
不确定存储过程在此处添加了什么。我会让客户决定选择哪个表。
-
表中有哪些数据?
-
@Jeremy Wiggins,您能否扩展阻止您将所有客户放在一个表中的安全限制?
-
@Mark Bannister - 这只是一个要求,正如我们对我们正在构建它的人所说的那样“我们可以将数据放在一个表中并通过一个键将其与不同的公司相关联”他们说“不,数据必须存储在单独的表中”。这就是目前的情况。至少我们能够说服他们不要为每家公司使用单独的数据库。但他们非常重视为公司保留数据。
-
@Jeremy Wiggins,在这种情况下,合并视图看起来是最佳选择 - 但它确实强调了单独表格要求的无意义。
标签: sql sql-server sql-server-2005 stored-procedures