嘿,我正在寻找创建存储过程的帮助。
这是详细信息
我有一个名为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
非常感谢任何帮助
答案 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
您尚未描述ProjectPartners
和Partner
之间的关系,因此我假设PPID
上的ProjectPartners
列是关系
您还提到您的ProjectPartners
表格中包含PPID, Partner1, partner2, partner3....partner25
列。你是否只计划有25个合作伙伴?如果你有26,你会添加一个新列吗?你可能想解决这个问题。
同样在列命名约定中,有些有点混乱。
PPID
上有ProjectPartners
。我认为这意味着ProjectPartnersId
。
在表ProjectDetails
上,您有列ProjectDID
。
这有点不一致。我想它应该是PDID
上的ProjectDetails
或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