#sql #sql-server #vba #ms-access #stored-procedures
#sql #sql-сервер #vba #ms-access #хранимые процедуры
Вопрос:
Справочная информация: Моя проблема немного специфична. Я следую спецификации для создания приложения, и одна из задач включает в себя создание хранимой процедуры. Я знаю, как создать и сохранить процедуру, а также реализовать ее, но у меня просто возникли проблемы с некоторым синтаксисом ее построения.
Спецификация гласит:
Напишите upGetTestID хранимой процедуры. Он примет 3 параметра: WOID, SampleID, Analite Вам нужно объединить tblWOSampleTest с tblTest для TestID, затем ВЫБЕРИТЕ TestID, ГДЕ совпадают три значения
У меня проблемы с пониманием того, что я должен делать. Таблицы необходимо объединить, потому что в одной таблице есть столбцы WOID, SampleID, TestID, но нет Analite, в то время как в другой таблице есть только Analite и TestID. Но тогда я не знаю, как ВЫБРАТЬ TestID, ГДЕ совпадают три значения Вот несколько попыток повторить инструкции:
CREATE PROCEDURE upGetTestID @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
AS
SELECT TestID
FROM tblWOSampleTest
JOIN tblTest
ON tblTest.TestID=tblWOSampleTest.TestID;
WHERE @WOID = tblTest.WOID AND @SampleID = tblTest.SampleID AND @Analyte = tblTest.Analyte
GO
Это не сработало
CREATE PROCEDURE upGetTestID @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
AS
SELECT *
FROM tblWOSampleTest
JOIN tblTest
ON tblTest.TestID=tblWOSampleTest.TestID;
SELECT TestID
WHERE @WOID = tblWOSampleTest.WOID AND @SampleID = tblWOSampleTest.SampleID AND @Analyte = tblTest.Analyte
GO
Это также не сработало. Что я действительно хочу знать, так это то, что инструкции хотят, чтобы я делал, потому что я немного запутался в этом.
Ответ №1:
Вы должны быть там, где должны быть таблицы с требуемыми столбцами. В противном случае ваш первый пост был правильным.
CREATE PROCEDURE upGetTestID @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
AS
SELECT TestID
FROM tblWOSampleTest
JOIN tblTest
ON tblTest.TestID=tblWOSampleTest.TestID;
WHERE @WOID = tblWOSampleTest.WOID AND @SampleID = tblWOSampleTest.SampleID AND @Analyte = tblTest.Analyte
GO
Комментарии:
1. спасибо за предложение, но в нем говорится, что есть ошибка, рядом с КОТОРОЙ
2. Не уверен, в какой из ваших таблиц были какие поля, но ваше соединение хорошее. Затем ваш WHERE должен запросить значения в таблицах, содержащих нужные вам поля. Если вам нужна дополнительная помощь, мне нужно увидеть схему 2 таблиц. Я могу только догадываться из вашего сообщения прямо сейчас.
Ответ №2:
CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60)
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
GO
Моей проблемой оказалось неоднозначное имя столбца. Я использовал этот веб-сайт в качестве ссылки http://databases.aspfaq.com/database/what-does-ambiguous-column-name-mean.html . Мне нужно было указать, какая таблица использовалась для столбца TestID