Полное руководство по хранимым процедурам SQL с табличными параметрами

Хранимые процедуры SQL — это мощные объекты базы данных, которые позволяют инкапсулировать и выполнять набор операторов SQL. Одним из распространенных требований является передача таблицы в качестве параметра хранимой процедуры. В этой статье блога мы рассмотрим различные методы достижения этой цели в разных системах баз данных, а также приведем примеры кода. Давайте погрузимся!

Метод 1: использование пользовательских типов таблиц (SQL Server)

-- Step 1: Create a user-defined table type
CREATE TYPE dbo.MyTableType AS TABLE (
    Column1 INT,
    Column2 VARCHAR(50),
    -- Add more columns as needed
);
-- Step 2: Create a stored procedure that accepts the table parameter
CREATE PROCEDURE dbo.MyProcedure
    @TableVariable dbo.MyTableType READONLY
AS
BEGIN
    -- Perform operations using the @TableVariable
    SELECT * FROM @TableVariable;
END;

Метод 2: использование JSON (PostgreSQL, MySQL, SQL Server)

-- Step 1: Pass the table data as JSON
DECLARE @TableJson NVARCHAR(MAX) = '
    [
        {"Column1": 1, "Column2": "Value1"},
        {"Column1": 2, "Column2": "Value2"},
        -- Add more rows as needed
    ]
';
-- Step 2: Create a stored procedure that accepts the JSON parameter
CREATE PROCEDURE dbo.MyProcedure
    @TableJson NVARCHAR(MAX)
AS
BEGIN
    -- Convert JSON to a table variable
    DECLARE @TableVariable TABLE (
        Column1 INT,
        Column2 VARCHAR(50),
        -- Add more columns as needed
    );
    INSERT INTO @TableVariable (Column1, Column2)
    SELECT Column1, Column2
    FROM OPENJSON(@TableJson)
    WITH (
        Column1 INT,
        Column2 VARCHAR(50)
        -- Map JSON properties to table columns
    );
    -- Perform operations using the @TableVariable
    SELECT * FROM @TableVariable;
END;

Метод 3: использование временных таблиц (Oracle, MySQL, PostgreSQL)

-- Step 1: Create a temporary table
CREATE TEMPORARY TABLE MyTempTable (
    Column1 INT,
    Column2 VARCHAR(50),
    -- Add more columns as needed
);
-- Step 2: Insert data into the temporary table
INSERT INTO MyTempTable (Column1, Column2)
VALUES (1, 'Value1'), (2, 'Value2');
-- Add more rows as needed
-- Step 3: Create a stored procedure that uses the temporary table
CREATE PROCEDURE MyProcedure()
BEGIN
    -- Perform operations using the temporary table
    SELECT * FROM MyTempTable;
END;

В этой статье мы рассмотрели различные методы передачи таблицы в качестве параметра хранимым процедурам SQL. Мы рассмотрели методы использования пользовательских типов таблиц, JSON и временных таблиц в различных системах баз данных. В зависимости от вашей конкретной платформы базы данных и требований вы можете выбрать наиболее подходящий метод для вашего сценария. Хранимые процедуры с табличными параметрами обеспечивают гибкость и модульность вашего кода SQL, позволяя эффективно работать с табличными данными.