Попробуйте использовать этот подход (пример для 2 простых таблиц)
CREATE TABLE Table1 (Id int, Name varchar(100));
INSERT INTO Table1 VALUES (1, 'Name1InTable1');
INSERT INTO Table1 VALUES (2, 'Name2InTable1');
INSERT INTO Table1 VALUES (3, 'Name3InTable1');
CREATE TABLE Table2 (Id int, Name varchar(100));
INSERT INTO Table1 VALUES (1, 'Name1InTable2');
INSERT INTO Table1 VALUES (2, 'Name2InTable2');
INSERT INTO Table1 VALUES (3, 'Name3InTable2');
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER FUNCTION dbo.f_GetIdFromTableByName
(
@tableName varchar(100), @name varchar(100)
)
RETURNS int
AS
BEGIN
DECLARE @Id int;
IF @tableName = 'Table1'
BEGIN
SELECT @Id = Id
FROM Table1
WHERE Name = @name;
END;
IF @tableName = 'Table2'
BEGIN
SELECT @Id = Id
FROM Table2
WHERE Name = @name;
END;
RETURN @Id
END
GO
Выполнить функцию
SELECT dbo.f_GetIdFromTableByName('Table2','Name2InTable2')