SQL Серверная хранимая процедура как ошибка ввода - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующая хранимая процедура, и я создаю настраиваемый тип, а затем передаю таблицу в качестве параметра для моей хранимой процедуры для обновления моей целевой таблицы:

-- Create Type
CREATE TYPE dbo.e2m_dt AS TABLE
(
    [ID] BIGINT,
    [text] VARCHAR(max)
)

-- Create Procedure:
CREATE PROCEDURE MERGE_REQUEST_RESULT  
    @temp_table dbo.e2m_dt READONLY
AS
    UPDATE Table1
    SET ID = @temp_table.ID,  
        text = @temp_table.text
    FROM Table1
    INNER JOIN @temp_table ON Table1.ID = @temp_table.ID
GO

Но я получаю следующие ошибки :

Сообщение 137, уровень 16, состояние 1, процедура MERGE_REQUEST_RESULT, строка 9
Необходимо объявить скалярную переменную «@temp_table».

Сообщение 137, уровень 16, состояние 1, процедура MERGE_REQUEST_RESULT, строка 10
Должна объявить скалярную переменную «@temp_table».

Сообщение 137, уровень 16, состояние 1, процедура MERGE_REQUEST_RESULT, строка 16
Должна объявить скалярную переменную "@ temp_table ".

Я новичок в SQL, любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 19 июня 2020

ID = @temp_table.ID будет относиться к скалярной переменной @temp_Table , а не к переменной табличного типа @temp_table. Назовите ваши объекты псевдонимом и используйте их:

CREATE PROCEDURE MERGE_REQUEST_RESULT  @temp_table dbo.e2m_dt READONLY
AS
        UPDATE T1
        SET ID = tt.ID,  
            [text] = tt.[text]
        FROM Table1 T1
        INNER JOIN @temp_table tt ON T1.ID = tt.ID;

GO

Примечание: я не рекомендую называть ваш varchar(MAX) столбец text. text - устаревший тип данных. Не используйте ключевые слова для имен объектов.

...