Мне нравится ответ @gotqn, но, если это будет представление, я бы сделал это:
--Sample Tables:
CREATE TABLE dbo.t1(id INT IDENTITY PRIMARY KEY, col1 INT);
CREATE TABLE dbo.t2(id INT IDENTITY PRIMARY KEY, col1 INT);
CREATE TABLE dbo.t3(id INT IDENTITY PRIMARY KEY, col1 INT);
CREATE TABLE dbo.t4(id INT IDENTITY PRIMARY KEY, col1 INT);
INSERT dbo.t1(col1) VALUES (10),(20),(30);
INSERT dbo.t2(col1) VALUES (60),(620),(630);
INSERT dbo.t3(col1) VALUES (0);
INSERT dbo.t4(col1) VALUES (0);
GO
--Solution
CREATE VIEW dbo.yourView AS
SELECT t.*,show = 1 FROM dbo.t1 AS t UNION ALL
SELECT t.*,show = 2 FROM dbo.t2 AS t UNION ALL
SELECT t.*,show = 3 FROM dbo.t3 AS t UNION ALL
SELECT t.*,show = 4 FROM dbo.t4 AS t
GO
Что приятно, так это то, что оптимизатор достаточно умен, чтобы полностью игнорировать и избегать касания таблиц с данными, не включенными в окончательный набор результатов.
Обратите внимание на эти запросы и планы выполнения:
SELECT v.* FROM dbo.yourView AS v;
SELECT v.* FROM dbo.yourView AS v WHERE v.show = 1;
SELECT v.* FROM dbo.yourView AS v WHERE v.show IN (1,3);
SELECT v.* FROM dbo.yourView AS v WHERE v.show <> 1;