编写在表模式之间切换的存储过程/函数的最佳方法是什么?

时间:2012-01-04 13:45:41

标签: sql sql-server

我们在数据库中有3个表:

  • [未批准]。[资料]
  • [已批准]。[数据]
  • [历史] [数据]

我们目前有3个存储过程,每个存储过程运行相同的select查询以从表中获取数据,但唯一的区别是模式。

在一个存储过程中(最好不使用动态SQL),这样做的最佳方式是什么

2 个答案:

答案 0 :(得分:5)

没有最佳方式。

您可以使用IF .. ELSE IF构造来决定选择哪一个。

但它们是3个不同的对象,所以这是预期的。我建议你不要正确使用模式......

来自dba.se:

答案 1 :(得分:2)

您可以创建如下视图:

CREATE VIEW dbo.blabla
AS
SELECT 0 as SourceSchema, otherfields from [Unapproved].[Data]
UNION ALL
SELECT 1 as SourceSchema, otherfields from [Approved].[Data]
UNION ALL
SELECT 2 as SourceSchema, otherfields from [History].[Data]
GO

CREATE PROC GetTheData
@fromwhere int
As
select otherfields from dbo.blabla where SourceSchema = @fromwhere

<强> BUT

我不能说它是 OPTIMAL 方式。

我同意@TomTom下的@TomTom