Partitioned view with dedicated "routing" column I have an application (Microsoft Dynamics NAV to be exact) that splits up data for different companies in tables with the exact same structure.

I can not change that behavior, so I built VIEWs that make it easier to handle that data for reporting purposes, like this:

CREATE VIEW [ALL COMPANIES$Employee]
AS
SELECT 'Company 1' as Company, * FROM [Company 1$Employee]
UNION ALL
SELECT 'Company 2' as Company, * FROM [Company 2$Employee]
UNION ALL
SELECT 'Company 3' as Company, * FROM [Company 3$Employee]
UNION ALL
SELECT 'Company 4' as Company, * FROM [Company 4$Employee]


That works well for the read case.

Now I want to also use these views for easier interfacing with other applications, that is, inserting and updateing data.

I do know about partitioned views, but this is not exactly the same, as I don't have specific columns with CHECK constraints, but "routing" to the underlying tables would have to be done with only the information of the newly introduced column Company.

Is there anything like that? Otherwise, I'm happy about all other proposed solutions that save me from using dynamic SQL.
One approach if you can't use a partitioned view is INSTEAD OF triggers like the examples below.  Note that the UPDATE trigger assumes that one never changes a primary key value after the initial insert.

CREATE TRIGGER [TRI ALL COMPANIES$Employee] ON
    [ALL COMPANIES$Employee]
    INSTEAD OF INSERT
AS

INSERT INTO [Company 1$Employee] (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM inserted
WHERE Company = 'Company 1';

INSERT INTO [Company 2$Employee] (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM inserted
WHERE Company = 'Company 2';

INSERT INTO [Company 3$Employee] (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM inserted
WHERE Company = 'Company 3';

INSERT INTO [Company 4$Employee] (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM inserted
WHERE Company = 'Company 4';
GO

CREATE TRIGGER [TRU ALL COMPANIES$Employee] ON
    [ALL COMPANIES$Employee]
    INSTEAD OF UPDATE
AS

UPDATE target
SET
      Col2 = inserted.Col2
    , Col3 = inserted.Col3
FROM [Company 1$Employee] AS target
JOIN inserted ON inserted.Col1 = target.Col1
WHERE inserted.Company = 'Company 1';

UPDATE target
SET
      Col2 = inserted.Col2
    , Col3 = inserted.Col3
FROM [Company 2$Employee] AS target
JOIN inserted ON inserted.Col1 = target.Col1
WHERE inserted.Company = 'Company 2';

UPDATE target
SET
      Col2 = inserted.Col2
    , Col3 = inserted.Col3
FROM [Company 3$Employee] AS target
JOIN inserted ON inserted.Col1 = target.Col1
WHERE inserted.Company = 'Company 3';

UPDATE target
SET
      Col2 = inserted.Col2
    , Col3 = inserted.Col3
FROM [Company 4$Employee] AS target
JOIN inserted ON inserted.Col1 = target.Col1
WHERE inserted.Company = 'Company 4';
GO

CREATE TRIGGER [TRD ALL COMPANIES$Employee] ON
    [ALL COMPANIES$Employee]
    INSTEAD OF DELETE
AS

DELETE target
FROM [Company 1$Employee] AS target
JOIN deleted ON deleted.Col1 = target.Col1
WHERE deleted.Company = 'Company 1';

DELETE target
FROM [Company 2$Employee] AS target
JOIN deleted ON deleted.Col1 = target.Col1
WHERE deleted.Company = 'Company 2';

DELETE target
FROM [Company 3$Employee] AS target
JOIN deleted ON deleted.Col1 = target.Col1
WHERE deleted.Company = 'Company 3';

DELETE target
FROM [Company 4$Employee] AS target
JOIN deleted ON deleted.Col1 = target.Col1
WHERE deleted.Company = 'Company 4';
GO