SQL存储过程连接表

SQL存储过程连接表,sql,sql-server,vba,ms-access,stored-procedures,Sql,Sql Server,Vba,Ms Access,Stored Procedures,背景:我的问题有点具体。我按照规范创建应用程序,其中一项任务涉及创建存储过程。我知道如何创建和存储过程以及如何实现过程,但我只是在构造过程的一些语法方面遇到了问题 规范规定: 编写一个存储过程upGetTestID。它将接受3个参数:WOID、样本ID、分析物 您需要在TestID上将tblWOSampleTest加入到TBLTTest 然后选择三个值匹配的TestID 我很难理解我应该做什么。这些表需要连接,因为一个表有WOID、SampleID、TestID列,但没有分析物,而另一个表只有A

背景:我的问题有点具体。我按照规范创建应用程序,其中一项任务涉及创建存储过程。我知道如何创建和存储过程以及如何实现过程,但我只是在构造过程的一些语法方面遇到了问题

规范规定:

编写一个存储过程upGetTestID。它将接受3个参数:WOID、样本ID、分析物 您需要在TestID上将tblWOSampleTest加入到TBLTTest 然后选择三个值匹配的TestID

我很难理解我应该做什么。这些表需要连接,因为一个表有WOID、SampleID、TestID列,但没有分析物,而另一个表只有Analyte和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

这也没用。我真正想知道的是指令要我做什么,因为我对此有点困惑。

您应该在哪些表中列出所需的列。否则,你的第一篇文章是正确的

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

我的问题是一个模棱两可的列名。我用这个网站作为参考。我需要指定TestID列使用的是哪个表

谢谢您的建议,但是它说附近有一个错误,我不确定您的哪些表有哪些字段,但是您的联接是好的。然后,WHERE应该询问表中包含所需字段的值。如果您需要更多帮助,我需要查看这两个表的模式。我现在只能从你的帖子中猜测。
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