SQL查询,搜索数据和返回项目名称

时间:2013-06-17 10:41:02

标签: sql sql-server tsql select stored-procedures

嘿,我正在寻找创建存储过程的帮助。 这是详细信息 我有一个名为Partners的表,其中包含partner information (Columns, PartnerID and partnername)我还有一个名为ProjectPartners的表,其中包含项目与合作伙伴columns( PPID, Partner1, partner2, partner3....partner25)之间的链接,我还有另一个表名为ProjectDetails,其中包含项目columns( ProjectDID, Project)的信息projectpartners的外键位于Projectdetails内。

我正在寻找创建一个允许我输入partner name的存储过程,然后显示它们包含在内的项目。我已经有了一些模拟代码,但似乎没有用。

@partnername nvarchar(50)
AS 
SET NOCOUNT ON;
SELECT ProjectDID, Project
FROM Projectdetails
WHERE Partners.PartnerName = @partnername

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您缺少表格架构中的连接以获取必要的数据。 阅读这篇关于joins的MSDN文章。

select ProjectDetails.ProjectDID, ProjectDetails.Project
from ProjectDetails
join ProjectPartners on ProjectPartners.ProjectDID = ProjectDetails.ProjectDID
join Partners on Partners.PartnerId  = ProjectPartners.PPID
where Partners.PartnerName = @partnerName

您尚未描述ProjectPartnersPartner之间的关系,因此我假设PPID上的ProjectPartners列是关系

您还提到您的ProjectPartners表格中包含PPID, Partner1, partner2, partner3....partner25列。你是否只计划有25个合作伙伴?如果你有26,你会添加一个新列吗?你可能想解决这个问题。

同样在列命名约定中,有些有点混乱。 PPID上有ProjectPartners。我认为这意味着ProjectPartnersId。 在表ProjectDetails上,您有列ProjectDID。 这有点不一致。我想它应该是PDID上的ProjectDetails或ProjectPartners上的ProjectPID 就个人而言,我一直偏爱普通的旧Id作为我的标识栏。

UPDATE:

根据您在下面的评论,您的表格可能会有一些根本性的错误:

create table Partners (
    Id int not null primary key identity,
    PartnerName nvarchar(100) not null)
go

create table ProjectDetails(
    Id int not null primary key identity,
    Project nvarchar(100) not null)
go


create table ProjectPartners (
PartnersId int not null,
    ProjectDetailsId int not null
)
go

alter table ProjectPartners add constraint FK_ProjectPartners_PartnersId_Partners_Id foreign key (PartnersId) references Partners(Id)
alter table ProjectPartners add constraint FK_ProjectPartners_ProjectDetailsId_ProjectDetails_Id foreign key (ProjectDetailsId) references ProjectDetails(Id)
go

我建议将数据库架构更改为根据上面提供的更灵活的架构。 这样,每次有新合作伙伴时,都会通过添加新列来阻止不断增长的ProjectPartners表。

它将解决您的外键的所有问题,并使您的表更直观。

现在这将产生SQL:

select ProjectDetails.Project, ProjectDetails.Id
from ProjectDetails
join ProjectPartners on ProjectPartners.ProjectDetailsId = ProjectDetails.Id
join Partners on Partners.Id = ProjectPartners.PartnersId
where Partners.PartnerName= @partnerName