0

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

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

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

任何帮助都感激不尽

4

1 回答 1

1

您缺少通过表架构获取必要数据的连接。阅读这篇关于连接的 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

ProjectPartners您还没有描述and之间的关系Partner,所以我假设PPIDon 列ProjectPartners是关系

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

同样在列命名约定中,有些有点混乱。你有PPIDProjectPartners我想这意味着ProjectPartnersId. 在桌子上ProjectDetails你有列ProjectDID。这有点不一致。我想它应该在 ProjectPartnersPDIDProjectDetailsProjectPID在 ProjectPartners 上。就我个人而言,我一直偏爱普通的旧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
于 2013-06-17T10:56:04.487 回答