SQL 存储过程 连接表

Posted

技术标签:

【中文标题】SQL 存储过程 连接表【英文标题】:SQL Stored procedure Joining tables 【发布时间】:2014-06-19 19:25:17 【问题描述】:

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

规范规定:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

感谢您的建议,但它说 WHERE 附近有错误 不确定您的哪些表有哪些字段,但您的联接很好。然后您的 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

【讨论】:

以上是关于SQL 存储过程 连接表的主要内容,如果未能解决你的问题,请参考以下文章

如何执行存储过程

sql 调用已经建立的存储过程

SQL Server存储过程中使用表值作为输入参数示例

sql server存储过程如何动态生成表名

sql server 怎么服务器连接调用oracle的存储过程

sql 查看数据库 操作记录,比如查询,存储过程的 记录 怎么查看?