SQL查询、搜索数据并返回项目名称

SQL查询、搜索数据并返回项目名称,sql,sql-server,tsql,select,stored-procedures,Sql,Sql Server,Tsql,Select,Stored Procedures,嘿,我正在寻找一些关于创建存储过程的帮助。 详情如下 我有一个名为Partners的表,其中包含合作伙伴信息(列、PartnerID和partnername)我还有另一个名为ProjectPartners的表,其中包含项目和合作伙伴列(PPID、Partner1、partner2、partner3…partner25)之间的链接我还有一个名为ProjectDetails的表,其中保存了项目列(ProjectDID,project)的信息projectpartners的外键在ProjectDeta

嘿,我正在寻找一些关于创建存储过程的帮助。 详情如下 我有一个名为
Partners
的表,其中包含
合作伙伴信息(列、PartnerID和partnername)
我还有另一个名为
ProjectPartners
的表,其中包含项目和合作伙伴
列(PPID、Partner1、partner2、partner3…partner25)之间的链接
我还有一个名为
ProjectDetails
的表,其中保存了项目
列(ProjectDID,project)的信息
projectpartners
的外键在
ProjectDetails

我希望创建一个存储过程,允许我输入
合作伙伴名称
,然后显示其中包含的项目。我已经有了一些模拟代码,但它似乎不起作用

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

任何帮助都将不胜感激

您缺少通过表架构获取必要数据的连接。 请阅读这篇MSDN文章

您没有描述
ProjectPartners
partners
之间的关系,因此我假设
ProjectPartners
上的
PPID
列就是这种关系

您还提到,您的
ProjectPartners
表中有
PPID、Partner1、partner2、partner3…partner25列。你只打算有25个合伙人吗。如果你有26个,你会添加一个新的列吗?你可能想解决这个问题

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

更新: 根据您在下面的评论,听起来您的表格可能有一些根本性的错误:

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

它们使用Partners表主键PartnerID链接,在projectPartners表外键是(Partner1、Partner2…partner 25)。这种类型的典型设计是,您的
ProjectPartner
表应该有ProjectID和单个PartnerID,然后,对于与项目关联的多个合作伙伴,您有多个ProjectPartner行。这将使您的查询更容易。这就是为什么它是经典的解决方案:-)
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