Прошло некоторое время с тех пор, как я сделал какой-либо серьезный T-SQL. Я думал, что у меня есть это право, но я получаю сообщение об ошибке, причину которого не могу понять. Это для хранимой процедуры, которая не является сложной. Код ниже:
--======================================================
-- Create Natively Compiled Stored Procedure Template
--======================================================
USE Viper;
GO
-- Drop stored procedure if it already exists
IF OBJECT_ID('API.newCategory','P') IS NOT NULL
DROP PROCEDURE API.newCategory;
GO
CREATE PROCEDURE API.newCategory
-- Add the parameters for the stored procedure here
@Category varchar(20) = null
WITH NATIVE_COMPILATION, SCHEMABINDING
AS BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'
)
--Insert statements for the stored procedure here
DECLARE @tmp int = 0;
IF @Category IS NOT NULL
AND @Category != ''
SET @tmp = ISNULL(
(SELECT idCategory
FROM Products.Category
WHERE Category = @Category),0);
IF @tmp = 0
INSERT INTO Products.Category (Category)
OUTPUT inserted.idCategory INTO @tmp
VALUES (@Category);
ELSE
UPDATE Category
SET active = 1
WHERE idCategory = @tmp;
RETURN @tmp;
END;
GO
Сообщение об ошибке, которое я получаю:
Сообщение 1087, уровень 16, состояние 1, процедура newCategory, строка 22 [строка запуска пакета 11] Необходимо объявить табличную переменную «@tmp».
Я надеюсь, что кто-то может указать мне в правильном направлении. Я уверен, что это что-то до глупости простое, я просто не могу видеть это прямо сейчас. Боюсь, немного ржавый.
Просто для ясности, операционная цель SP состоит в том, чтобы: 1/Проверить, действительно ли существует Категория, предоставленная для работы 2/Если есть, то попытаться получить ее идентификатор первичного ключа (idCategory) 3/Если нет PK для категории, затем вставьте его и верните idCategory в @tmp 4/ Если есть PK, убедитесь, что для активного столбца установлено значение 1 5/ верните @tmp в качестве результата (либо PK, либо 0)
Ура и спасибо за любую помощь
Лягушка