SQL функция для поиска идентификатора по имени - PullRequest
0 голосов
/ 17 июня 2020

Каждая из наших справочных таблиц имеет поле «Имя» с уникальным индексом и первичный ключ ID. Можно ли написать такую ​​функцию, как ID (@tableName varchar (100), @name varchar (100), которая будет возвращать идентификатор? "EXE C" внутри функций, похоже, не разрешена. При необходимости мы могли бы указать это таблицы, с которыми это будет работать внутри функции.

1 Ответ

1 голос
/ 17 июня 2020

Попробуйте использовать этот подход (пример для 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...