我有两个不同的视图,它们具有相同的精确列,但数据不同。它们的调用取决于键的值。
现在,我可以在某个地方集中处理,而不是使用带有if语句的sql函数。就像带有IF语句的新视图一样? (我知道这是不可能的)
更新
根据下面的评论,我需要创建一个sql表函数,你能帮我解决下面的代码吗?
CREATE FUNCTION GetCorrectData ( @id INT )
RETURNS TABLE
AS
RETURN
(
SELECT * FROM view1
-- how to add the if here for view 2?
--if @id=10 then view1 else view2
)
由于
答案 0 :(得分:1)
另一种方法是创建一个新视图,例如
CREATE VIEW view3 AS
SELECT a.*, 'view_1' as view_type
FROM view1 a
UNION ALL
SELECT b.*, 'view_2' as view_type
FROM view2 b
然后,您可以SELECT * from view3 WHERE view_type ='view_1'
查询特定视图中的数据。
答案 1 :(得分:0)
您可以看一下:
两个视图都返回两列string-type。
过程/ ad-hoc 方法应该更快,因为过程与IF
接近。内联函数是可预测的,优化器将能够使用索引和统计信息。
CREATE VIEW dbo.Test1 AS
SELECT COLUMN_NAME,TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS;
GO
CREATE VIEW dbo.Test2 AS
SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE';
GO
CREATE FUNCTION dbo.MyFunc(@key INT)
RETURNS TABLE
AS
RETURN
SELECT * FROM dbo.Test1 WHERE @Key=1
UNION ALL
SELECT * FROM dbo.Test2 WHERE @Key=2;
GO
SELECT * FROM dbo.MyFunc(1); --try 2 as well
GO
DROP FUNCTION dbo.MyFunc;
DROP VIEW dbo.Test2;
DROP VIEW dbo.Test1;