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