#sql-server #stored-procedures #output-parameter #sql
#sql-сервер #хранимые процедуры #выходной параметр #sql
Вопрос:
Я работаю с интерфейсом MS-Access 2010, где я вызывал хранимые процедуры, и серверной частью MS-SQl server 2008, где я применяю сценарии для хранимых процедур. Я создал хранимую процедуру, которая извлекает TestID, где входные параметры соответствуют значениям в двух объединенных таблицах.Моя проблема заключается в попытке зафиксировать то, что оператор select возвращает с помощью выходного параметра. Вот моя хранимая процедура SQL
CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60), @RecordsAffected int OUT
AS
SELECT TestID = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2
ON t1.TestID=t2.TestID;
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte
set @RecordsAffected = @@Identity
GO
Я исследовал несколько способов сделать это, и, кажется, мне следует использовать оператор SET, но я действительно не знаю, как зафиксировать значение. Этот пример всегда возвращает ноль.
Я подумал, может быть, что-то вроде этого сработает:
CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60), @RecordsAffected int OUT
AS
SELECT @RecordsAffected = (SELECT TestID = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2
ON t1.TestID=t2.TestID;
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte)
GO
Но и это не сработало. Есть ли способ сохранить возвращаемые значения оператора SELECT в переменной?
Комментарии:
1. Есть ли только один TestID, возвращаемый для каждого условия [@WOID] = t1.WOID И [@SampleID] = t1.SampleID И [@Analyte] = t2.Analyte? Вы ищете TestID или количество строк, которые соответствуют критериям.
2. Возвращается только один TestID. Я ищу этот конкретный TestID
Ответ №1:
Если вы хотите вернуть идентификатор теста и при условии, что у вас есть только один идентификатор теста для критериев соответствия, вы можете просто использовать следующее в качестве инструкции выбора —
SELECT @RecordsAffected = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2 ON t1.TestID=t2.TestID;
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte
Кроме того, вы, вероятно, захотите переименовать свой выходной параметр как что-то вроде (@OutputTestId или @TestID), поскольку имя @RecordsAffected дает неверное представление о том, для чего оно на самом деле предназначено.