All of my tables have those two columns:
[Id] [uniqueidentifier] NOT NULL
[Revision] [bigint] IDENTITY(1, 1) NOT NULL
Every other time I write a query, I want to eliminate some of the rows. The elimination conditions are the same for every table. I want an easy way to specify those conditions once and then reuse them on any table.
I defined a table type as a "base class" for my tables
CREATE TYPE EntityTable AS TABLE (
[Id] [uniqueidentifier] NOT NULL
,[Revision] [bigint] IDENTITY(1, 1) NOT NULL
)
And here's a table valued function I create
CREATE FUNCTION MaxRevision (@Entities EntityTable READONLY)
RETURNS TABLE
AS
RETURN
SELECT *
FROM @Entities e
WHERE e.Revision = (
SELECT max(Revision)
FROM @Entities er
WHERE er.id = e.id
)
I thought I would be able to use it like that
SELECT * FROM MaxRevision(NameOfSomeTableWhichHasIdAndRevisionColumn) WHERE /* some other conditions */
But I'm getting the error
Msg 207, Level 16, State 1, Line 2
Invalid column name 'NameOfSomeTableWhichHasIdAndRevisionColumn'.
Why it treats the table name I pass as a column name? Are there any other ways to implement the behavior I want?