SQL存储过程连接表

时间:2014-06-19 19:25:17

标签: sql sql-server vba stored-procedures access-vba

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

规范声明:

编写存储过程upGetTestID。它将接受3个参数:WOID,SampleID,Analyte     您需要在TestID上将tblWOSampleTest加入tblTest     然后SELECT TestID WHERE三个值匹配

我无法理解我应该做什么。需要连接表,因为一个表具有列WOID,SampleID,TestID但没有Analyte,而另一个表只有Analyte和TestID。但后来我不知道如何 SELECT TestID WHERE三个值匹配以下是一些复制指令的尝试:

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

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

2 个答案:

答案 0 :(得分:0)

您应该针对具有所需列的表。否则你的第一篇文章是正确的方式。

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 :(得分:0)

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